2016-05-03 23 views
0

Ich versuche, eine JSON-Datei in einer Datenbank zu speichern. Ich habe sehr wenig Erfahrung, aber nach ein wenig suchen, fand ich diesen CodeJSON in SQLite schreiben

import json 
import sqlite3 

JSON_FILE = "some.json" 
DB_FILE = "some.db" 

traffic = json.load(open(JSON_FILE)) 
conn = sqlite3.connect(DB_FILE) 

foo = traffic[0]["foo"] 
bar = traffic[0]["bar"] 

data = [foo, bar] 

c = conn.cursor() 
c.execute('create table table_name (foo, bar)') 
c.execute('insert into table_name values (?,?)', data) 

conn.commit() 
c.close() 

Allerdings bin ich KeyError: 0 einen Fehler geworfen.

Die JSON, die ich mit ist

Testen bin
{ 
    "name":"", 
    "children":[ 
     { 
     "name":"Level 1", 
     "children":[ 
      { 
       "name":"Level 2", 
       "children":[ 
        { 
        "name":"Level 3", 
        "children":[ 
         { 
          "name":"Level 4", 
          "children":[ 
           { 
           "name":"Speed", 
           "children":null, 
           "id":6 
           } 
          ], 
          "id":5 
         } 
        ], 
        "id":4 
        } 
       ], 
       "id":3 
      } 
     ], 
     "id":2 
     }, 
     { 
     "name":"Level 1", 
     "children":[ 
      { 
       "name":"Level 2", 
       "children":[ 
        { 
        "name":"Level 3", 
        "children":[ 
         { 
          "name":"Level 4", 
          "children":[ 
           { 
           "name":"Cost", 
           "children":null, 
           "id":11 
           } 
          ], 
          "id":10 
         } 
        ], 
        "id":9 
        } 
       ], 
       "id":8 
      } 
     ], 
     "id":7 
     }, 
     { 
     "name":"Level 1", 
     "children":[ 
      { 
       "name":"Level 2", 
       "children":[ 
        { 
        "name":"Level 3", 
        "children":[ 
         { 
          "name":"Level 4", 
          "children":[ 
           { 
           "name":"Manufacturability", 
           "children":null, 
           "id":16 
           } 
          ], 
          "id":15 
         } 
        ], 
        "id":14 
        } 
       ], 
       "id":13 
      } 
     ], 
     "id":12 
     } 
    ], 
    "id":1 
} 

Wie genau kann ich das JSON schreiben, oder einen ähnlichen, in einer Datenbank?

+0

das Problem offensichtlich ist, ist Python lanauguage interpretieren, so dass Sie nur die Aussagen einer nach dem anderen geben könnte , der Schlüsselfehler verursacht den json, den du lädst, wie ein dict konnte nicht mit Index indizieren, also war 0 Count als Schlüssel, der Name oder Kinder sein sollte, trotz des Niveaus/der Tiefe, oder es ist ein Diktat eines Diktats, später, Es gibt keine Foo oder Bar in Ihrer JSON/Dict-Datei –

Antwort

1

Der Code, den Sie angezeigt haben, erstellt eine Datenbank mit einer Tabelle namens "table_name", die zwei Spalten enthält, "foo" und "bar". Diese Struktur stimmt nicht mit der JSON-Datei überein, die Sie speichern möchten.

Sie müssen die SQL-Abfragen ändern, um ein Datenbankschema zu erstellen, das die JSON-Struktur, die Sie speichern möchten, besser darstellt.

Zum Beispiel könnten Sie eine Tabelle mit drei Spalten, definiert in der DDL unten erstellen:

CREATE TABLE table_name (
    id  INTEGER PRIMARY KEY, 
    name VARCHAR, 
    parent INTEGER 
); 

Ihre JSON ist hierarchisch aufgebaut, was einige Probleme mit Datenbankdesign verursacht. Während selbstreferenzierende Tabellen ein umstrittenes Problem darstellen, könnten sie Ihren JSON speichern und die Struktur beibehalten.

Wenn Sie wollen einfach die JSON speichern Zeichenfolge in einer Datenbank, können Sie etwas tun:

CREATE TABLE table_name (
    id    INTEGER PRIMARY KEY, 
    json_contents VARCHAR 
);