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

2024-12-16 08:35:00
admin
原创
151
摘要:问题描述:我有一些 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 字符串。对其进行解码,然后像访问外部对象一样访问其内容。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2379  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1510  
  PLM(产品生命周期管理)系统在企业项目管理中扮演着至关重要的角色,它能够整合产品从概念设计到退役的全流程信息,提升协同效率,降低成本。然而,项目范围蔓延是项目管理过程中常见且棘手的问题,在PLM系统环境下也不例外。范围蔓延可能导致项目进度延迟、成本超支、质量下降等一系列不良后果,严重影响项目的成功交付。因此,如何在P...
plm项目经理是做什么   16  
  PLM(产品生命周期管理)系统在现代企业的产品研发与管理过程中扮演着至关重要的角色。它不仅仅是一个管理产品数据的工具,更能在利益相关者分析以及沟通矩阵设计方面提供强大的支持。通过合理运用PLM系统,企业能够更好地识别、理解和管理与产品相关的各类利益相关者,构建高效的沟通机制,从而提升产品开发的效率与质量,增强企业的市场...
plm是什么   20  
  PLM(产品生命周期管理)项目管理对于企业产品的全生命周期规划、执行与监控至关重要。在项目推进过程中,监控进度偏差是确保项目按时、按质量完成的关键环节。五维健康检查指标体系为有效监控PLM项目进度偏差提供了全面且系统的方法,涵盖了项目的多个关键维度,有助于及时发现问题并采取针对性措施。需求维度:精准把握项目基石需求维度...
plm项目管理软件   18  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用