首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON as Dictionary与python的使用方法

JSON as Dictionary与python的使用方法
EN

Stack Overflow用户
提问于 2017-02-22 17:24:20
回答 1查看 65关注 0票数 0

我正在尝试使用一个数据源来学习。我正在尝试从公共数据源获取数据,并将其传递到一个小的sqlite DB。

我有这个json结构:

代码语言:javascript
运行
复制
    [
 {
   "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)"
 },]

到目前为止,我成功地使用了以下代码,但是如何正确读取数据呢?

此部分不起作用:

代码语言:javascript
运行
复制
name = entry[0];
id = entry[1];

以下是我使用的代码的一部分:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 17:27:52

当你加载json时,你会得到一个列表中的json对象。所以您使用for循环迭代该列表

代码语言:javascript
运行
复制
for item in json_data:

在这一点上,item引用了json对象而不是列表,您正在尝试通过使用

代码语言:javascript
运行
复制
name = entry[0];

还有一件事,不要在python中使用(;)来结束语句,您正在使用它

你需要从字典中获取数据,应该是这样的

代码语言:javascript
运行
复制
for item in json_data:
    name=item.get('name')
    id=item.get('id')

你的代码应该是这样的

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42387434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档