2017-02-22 17 views
0

学習目的でデータソースを再生しようとしています。私はパブリックデータソースからデータを取り出し、それを小さなsqlite DBに配信しようとしています。PythonでJSONを使用する方法

私は、このJSON構造を有する:

[ 
{ 
    "name": "Aachen", 
    "id": 1, 
    "nametype": "Valid", 
    "recclass": "L5", 
    "mass (g)": 21, 
    "fall": "Fell", 
    "year": "01/01/1880 12:00:00 AM", 
    "reclat": 50.775, 
    "reclong": 6.08333, 
    "GeoLocation": "(50.775, 6.08333)" 
}, 
{ 
    "name": "Aarhus", 
    "id": 2, 
    "nametype": "Valid", 
    "recclass": "H6", 
    "mass (g)": 720, 
    "fall": "Fell", 
    "year": "01/01/1951 12:00:00 AM", 
    "reclat": 56.18333, 
    "reclong": 10.23333, 
    "GeoLocation": "(56.18333, 10.23333)" 
},] 

これまでのところ、私は以下のコードで動作するように管理しますが、どのように私は、正しくデータを読みますか。

この部分のdoesntの仕事:

name = entry[0]; 
id = entry[1]; 

ここでは、私が使用したコードの一部です:

import json 
import sqlite3 

conn = sqlite3.connect('rosterdb.sqlite') 
cur = conn.cursor() 

# Do some setup 
cur.executescript(''' 
DROP TABLE IF EXISTS User; 
DROP TABLE IF EXISTS Member; 
DROP TABLE IF EXISTS Course; 

CREATE TABLE User (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
    name TEXT UNIQUE 
); 

CREATE TABLE Course (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
    title TEXT UNIQUE 
); 

CREATE TABLE Member (
    user_id  INTEGER, 
    course_id INTEGER, 
    role  INTEGER, 
    PRIMARY KEY (user_id, course_id) 
) 
''') 

fname = raw_input('Enter file name: ') 
if (len(fname) < 1) : fname = 'meteorite.json' 


str_data = open(fname).read() 
json_data = json.loads(str_data) 

for entry in json_data: 

    name = entry[0]; 
    id = entry[1]; 

    print name, id 

答えて

1

あなたはJSONをロードすると、リストにJSONオブジェクトを取得します。だから、この時点項目でループ

for item in json_data: 

のために使用してそのリストをリストしていないJSONオブジェクトを参照し、あなたが

name = entry[0]; 

もう一つは、使用いけない使用することによって、あなたのコード内のリストにアクセスしようとしている反復します(;)ステートメントを終了するにはPythonで、あなたはあなたが辞書からデータを取得する必要があります

、それはこの

for item in json_data: 
    name=item.get('name') 
    id=item.get('id') 
0のようにする必要があることを利用しています

あなたのコードはpushpendraのchauhanに動作します。この

import json 
import sqlite3 

conn = sqlite3.connect('rosterdb.sqlite') 
cur = conn.cursor() 

# Do some setup 
cur.executescript(''' 
DROP TABLE IF EXISTS User; 
DROP TABLE IF EXISTS Member; 
DROP TABLE IF EXISTS Course; 

CREATE TABLE User (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
    name TEXT UNIQUE 
); 

CREATE TABLE Course (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
    title TEXT UNIQUE 
); 

CREATE TABLE Member (
    user_id  INTEGER, 
    course_id INTEGER, 
    role  INTEGER, 
    PRIMARY KEY (user_id, course_id) 
) 
''') 

fname = raw_input('Enter file name: ') 
if (len(fname) < 1) : fname = 'meteorite.json' 


str_data = open(fname).read() 
json_data = json.loads(str_data) 

for entry in json_data: 

    name=entry.get('name') 
    id=entry.get('id') 

    print name, id 
+0

はい、のようにする必要があります。ありがとう – troy

関連する問題