Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 访问任意嵌套JSON数据中的特定字段_Python_Json_List_Dictionary - Fatal编程技术网

Python 访问任意嵌套JSON数据中的特定字段

Python 访问任意嵌套JSON数据中的特定字段,python,json,list,dictionary,Python,Json,List,Dictionary,如何从这个json中获取“请跟我来”的内容 { "status": "200", "msg": "", "data": { "time": "1515580011", "video_info": [ { "announcement": "{\"announcement_id\":\"6\",\"name\":\"INS\\u8d26\\u53f7\",\"icon\":\"http:\\\/\\\/liveme.cms.ksmobile

如何从这个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": "",
这抓住了
['announcement']
的一切,我不能做
['announcement']['content']

正确的方法是什么

提前感谢您帮助我解决这一问题。

公告“的内容是另一个JSON字符串。解码它,然后像处理外部对象一样访问它的内容。

您有嵌套的JSON数据;与
'annoucement'
键关联的字符串本身就是另一个独立的嵌入式JSON文档

您必须首先解码该字符串:

replay_data = raw_replay_data['data']['video_info'][0]
announcement = replay_data['announcement']
然后从那里处理生成的字典。

在一行中-

import json

replay_data = raw_replay_data['data']['video_info'][0]
announcement = json.loads(replay_data['announcement'])
print(announcement['content'])

为了帮助您了解如何访问数据(这样您就不必再次询问),您需要盯着数据看

首先,让我们很好地展示您的数据。您可以使用
json.dumps(数据,缩进=4)
,也可以使用类似的在线工具

***请注意,
announcement
键中的数据实际上是更多的json数据,我在单独的行中列出了这些数据

首先,找出数据所在的位置。您正在查找
内容
键中的数据,该键可通过
公告
键访问,该键是dicts列表中词典的一部分,可通过
视频信息
键访问,而
数据
又可访问该键

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

  • 数据
    ,字典
  • video\u info
    ,目录列表
  • 公告
    ,目录中第一个目录中的目录
  • 内容
    作为json数据的一部分驻留

  • 首先,

    {
        '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'
    } 
    
    其次,

    其次,

    如果只需要第一个元素,这就足够了。否则,您需要迭代:

    其次,

    for k in j:
        ...
    
    现在,
    l
    是JSON数据。加载它-

    l = k['announcement']
    
    最后,

    import json
    m = json.loads(l)
    


    如果您将来有这种性质的查询,希望这可以作为指导。

    我们如何有效地处理空案例。假设中不存在m['content']JSON@JibinMathew我会想象一些类似于尝试的东西,除了AttributeError或if block应该足够了。@IgncioVazquez Abrams你能提供一个代码示例吗?
    k = j[0] # since this is a list
    
    for k in j:
        ...
    
    l = k['announcement']
    
    import json
    m = json.loads(l)
    
    content = m['content']
    
    print(content)
    'FOLLOW ME PLEASE'