我正在尝试使用数据源进行学习。我正在尝试从公共数据源获取数据并将其传递给小型sqlite数据库。
我有这个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
答案 0 :(得分:1)
当你加载json时,你会在列表中获得json对象。所以你使用for循环
迭代该列表for item in json_data:
此时项目引用json对象不列出,并且您尝试使用
访问代码中的列表name = entry[0];
另外一件事不要在python中使用(;)来结束语句而你正在使用
你需要从字典中获取数据,它应该是这样的
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