【发布时间】:2015-07-07 13:51:12
【问题描述】:
回答: data["data"]["items"] 中的方括号表示字典列表。我原以为括号表示所有这些字典都是一个列表inside一个项目的列表(即[[item1,item2]])所以我不得不像这样调用一个0索引:数据[“数据”][“项目”][0]。那是不正确的,[0] 是不必要的,我真的应该知道,但没有意识到。
我正在使用 GAE,因此您可以将 self.response.write 语句视为 print。
由于某种原因,尽管 user_xid 打印正确,但当我尝试在我的 for 循环中解析 json_data["data"]["items"][0] 时,解释器给了我错误,它似乎将 x 评估为 string,因为我收到一条错误消息,告诉我字符串索引必须是整数。
我没有意识到json_data["data"]["items"][0] 会产生一个字符串。我有点受阻。与使用json_data["data"]["items"][0] 而不是json_data["data"]["items"] 有什么关系吗?
我也尝试过json.loads(json_data["data"]["items"][0]),但无济于事。任何意见表示赞赏。
我有以下 JSON,为了便于阅读,我将其拆分了一下:
{"meta":
{"user_xid": "REDACTED", "message": "OK", "code": 200, "time": 1436273692},
"data":
{"items": [
{"time_completed": 1436193938, "xid": "4tLz2M3x8_E9mTPIQsQUdrj-83spikha", "title": "for 7h 40m", "time_created": 1436165067, "time_updated": 1436194828, "details":
{"body": 0, "sound": 14348, "tz": "America/Vancouver", "awakenings": 1, "light": 13258, "mind": 0, "asleep_time": 1436165760, "awake": 1265, "rem": 0, "duration": 28871, "smart_alarm_fire": 1436193000, "quality": 81, "awake_time": 1436193600, "sunrise": 1436184840, "sunset": 1436156340},
"date": 20150706, "shared": true, "sub_type": 0},
{"time_completed": 1436135400, "xid": "4tLz2M3x8_Hk71lnuSLbeq4ascwJg-J8", "title": "for 25m", "time_created": 1436133600, "time_updated": 1436135590, "details":
{"body": 0, "sound": 0, "tz": "America/Vancouver", "awakenings": 0, "light": 1500, "mind": 0, "asleep_time": 1436133600, "awake": 300, "rem": 0, "duration": 1800, "smart_alarm_fire": 0, "quality": 2, "awake_time": 1436134800, "sunrise": 0, "sunset": 0},
"date": 20150705, "shared": true, "sub_type": 2},
{"time_completed": 1436133497, "xid": "4tLz2M3x8_GIYf6G9_ZKH9xrKpuEzMjm", "title": "for 23m", "time_created": 1436131387, "time_updated": 1436135461, "details":
{"body": 0, "sound": 1391, "tz": "America/Vancouver", "awakenings": 0, "light": 0, "mind": 0, "asleep_time": 1436132100, "awake": 719, "rem": 0, "duration": 2110, "smart_alarm_fire": 1436133445, "quality": 4, "awake_time": 1436133300, "sunrise": 0, "sunset": 0},
"date": 20150705, "shared": true, "sub_type": 1},
{"time_completed": 1436117080, "xid": "4tLz2M3x8_EUZyqCoXYOJO7Hfe92eSqg", "title": "for 26m","time_created": 1436115061, "time_updated": 1436121619, "details":
{"body": 0, "sound": 480, "tz": "America/Vancouver", "awakenings": 0, "light": 1119, "mind": 0, "asleep_time": 1436115479, "awake": 420, "rem": 0, "duration": 2019, "smart_alarm_fire": 1436117069, "quality": 2, "awake_time": 1436116800, "sunrise": 1436098380, "sunset": 1436156280},
"date": 20150705, "shared": true, "sub_type": 1},
],
"links":
{"next": "REDACTED"},
"size": 10}
}
我在 Python 中使用以下内容:
json_data = json.loads(user_data)
self.response.write('<br><br>x_id: ' + json_data["meta"]["user_xid"])
i = 0
for x in json_data["data"]["items"][0]:
duration = x['details']['duration']
date = x["date"]
self.response.write('<br><br>sleep number ' + str(i) + ' | duration: ' + str(duration) + ' | date: ' + str(date))
i += 1
我正在使用 GAE,因此您可以将 self.response.write 语句视为 print。
由于某种原因,尽管 user_xid 打印正确,但当我尝试在 for 循环中解析 json_data["data"]["items"][0] 时,解释器给了我错误,它似乎将 x 评估为 string,因为我收到一条错误消息,告诉我字符串索引必须是整数。
我没有意识到json_data["data"]["items"][0] 会产生一个字符串。我有点受阻。这与使用json_data["data"]["items"][0] 而不是json_data["data"]["items"] 有什么关系吗?
我也尝试过json.loads(json_data["data"]["items"][0]) 无济于事。任何意见表示赞赏。
谢谢!
【问题讨论】:
-
为什么会被否决?
标签: python json google-app-engine