JSON as Dictionary与python如何使用

时间:2017-02-22 09:24:20

标签: python json dictionary

我正在尝试使用数据源进行学习。我正在尝试从公共数据源获取数据并将其传递给小型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

1 个答案:

答案 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