我如何访问这个复杂 JSON 中的嵌套数据,其中包括另一个 JSON 文档作为字符串之一?

2024-12-16 08:35:00
admin
原创
133
摘要:问题描述:我有一些 JSON 数据,例如:{ "status": "200", "msg": "", "data": { "time": "1515580011...

问题描述:

我有一些 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

因此,总而言之,使用以下“梯级”来“走下”数据阶梯 -

  1. data,一本字典

  2. video_info,字典列表

  3. announcement,字典列表第一个字典中的一个字典

  4. 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 字符串。对其进行解码,然后像访问外部对象一样访问其内容。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1317  
  IPD(Integrated Product Development)项目管理作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它旨在通过整合企业的各种资源,实现产品的快速、高质量开发,从而提升企业的市场竞争力。IPD项目管理涵盖多个方面,其中五大核心要素尤为关键,它们相互关联、相互影响,共同构成了IPD项目...
IPD流程中PDCP是什么意思   5  
  IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理思想、模式和方法。它强调将产品开发视为一个完整的流程,涵盖从概念产生到产品退市的全生命周期,通过跨部门团队的协同合作,实现缩短产品上市时间、提高产品质量、降低成本等目标。IPD测试流程作为IPD体系的重...
华为IPD流程   7  
  华为 IPD 产品开发流程是一套先进且成熟的产品开发管理体系,在提升企业产品竞争力、促进团队协作等方面发挥着重要作用。它以市场为导向,强调跨部门团队的协同合作,旨在实现产品的快速、高质量交付,满足客户需求并提升企业的经济效益。通过深入了解和应用 IPD 产品开发流程,企业能够优化内部资源配置,提高团队协作效率,从而在激...
IPD管理流程   8  
  IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理思想、模式和方法。它强调将产品开发视为一个完整的流程,涵盖从概念产生到产品退市的全生命周期,涉及市场、研发、生产、销售、售后等多个部门的协同合作。构建高效的项目管理文化对于企业的发展至关重要,而IPD培...
IPD开发流程管理   5  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用