我如何访问这个复杂 JSON 中的嵌套数据,其中包括另一个 JSON 文档作为字符串之一?
- 2024-12-16 08:35:00
- admin 原创
- 133
问题描述:
我有一些 JSON 数据,例如:
{
"status": "200",
"msg": "",
"data": {
"time": "1515580011",
"video_info": [
{
"announcement": "{\"announcement_id\":\"6\",\"name\":\"INS\/u8d26\/u53f7\",\"icon\":\"http:\\/\\/liveme.cms.ksmobile.net\\/live\\/announcement\\/2017-08-18_19:44:54\\/ins.png\",\"icon_new\":\"http:\\/\\/liveme.cms.ksmobile.net\\/live\\/announcement\\/2017-10-20_22:24:38\\/4.png\",\"videoid\":\"15154610218328614178\",\"content\":\"FOLLOW ME PLEASE\",\"x_coordinate\":\"0.22\",\"y_coordinate\":\"0.23\"}",
"announcement_shop": "",
ETC。
我如何获取内容"FOLLOW ME PLEASE"
?我尝试使用
replay_data = raw_replay_data['data']['video_info'][0]
announcement = replay_data['announcement']
但现在announcement
是一个代表更多 JSON 数据的字符串。我无法继续索引announcement['content']
结果TypeError: string indices must be integers
。
如何以“正确”的方式获取所需的字符串,即尊重数据的实际结构?
解决方案 1:
一行代码即可 -
>>> json.loads(data['data']['video_info'][0]['announcement'])['content']
'FOLLOW ME PLEASE'
为了帮助您了解如何访问数据(这样您就不必再次询问),您需要盯着您的数据。
首先,让我们好好地布局一下您的数据。您可以使用,也可以使用JSONLint.comjson.dumps(data, indent=4)
等在线工具。
{
'data': {
'time': '1515580011',
'video_info': [{
'announcement': ( # ***
"""{
"announcement_id": "6",
"name": "INS\/u8d26\/u53f7",
"icon": "http:\\\\/\\\\/liveme.cms.ksmobile.net\\\\/live\\\\/announcement\\\\/2017-08-18_19:44:54\\\\/ins.png",
"icon_new": "http:\\\\/\\\\/liveme.cms.ksmobile.net\\\\/live\\\\/announcement\\\\/2017-10-20_22:24:38\\\\/4.png",
"videoid": "15154610218328614178",
"content": "FOLLOW ME PLEASE",
"x_coordinate": "0.22",
"y_coordinate": "0.23"
}"""),
'announcement_shop': ''
}]
},
'msg': '',
'status': '200'
}
* 请注意,密钥中的数据announcement
实际上是更多的json 数据,我将其放在单独的行上。
首先,找出数据所在的位置。您要查找content
键中的数据,这些数据可通过announcement
键访问,而键是字典列表内的字典的一部分,字典可通过video_info
键访问,而键又可通过访问data
。
因此,总而言之,使用以下“梯级”来“走下”数据阶梯 -
data
,一本字典video_info
,字典列表announcement
,字典列表第一个字典中的一个字典content
作为 json 数据的一部分存在。
第一的,
i = data['data']
下一个,
j = i['video_info']
下一个,
k = j[0] # since this is a list
如果你只想要第一个元素,这就足够了。否则,你需要迭代:
for k in j:
...
下一个,
l = k['announcement']
现在,l
是 JSON 数据。加载它 -
import json
m = json.loads(l)
最后,
content = m['content']
print(content)
'FOLLOW ME PLEASE'
如果您将来有此类疑问,这可以作为参考。
解决方案 2:
您有嵌套的 JSON 数据;与键关联的字符串'annoucement'
本身是另一个单独的、嵌入的 JSON 文档。
您必须先解码该字符串:
import json
replay_data = raw_replay_data['data']['video_info'][0]
announcement = json.loads(replay_data['announcement'])
print(announcement['content'])
然后从那里处理结果字典。
解决方案 3:
的内容"announcement"
是另一个 JSON 字符串。对其进行解码,然后像访问外部对象一样访问其内容。
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)