2017-02-22 47 views
0

Im пытается играть с источником данных для учебных целей. Я пытаюсь взять данные из общедоступного источника данных и доставить его в небольшую базу данных sqlite.JSON как словарь с python Как использовать

У меня есть эта структура 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)" 
},] 

до сих пор мне удалось поработать с кодом ниже, но как правильно читать данные?

эта часть не работает:

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]; 

еще одна вещь, которую не используют (;) в питоне, чтобы закончить заявление и вы используете что

Вам нужно получить данные из словаря, оно должно быть, как это

for item in json_data: 
    name=item.get('name') 
    id=item.get('id') 

Ваш код должен быть, как этот

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

да, который работает pushpendra CHAUHAN. благодаря – troy

 Смежные вопросы

  • Нет связанных вопросов^_^