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_Loops - Fatal编程技术网

如何在Python中循环使用JSON

如何在Python中循环使用JSON,python,json,loops,Python,Json,Loops,我不知道如何循环遍历深度超过1级的JSON对象。目标是: { "data":[ { "id":"251228454889939/insights/page_fan_adds_unique/day", "name":"page_fan_adds_unique", "period":"day", "values":[ { "value":9, "end_time":"2012-05-2

我不知道如何循环遍历深度超过1级的JSON对象。目标是:

{
  "data":[
    {
      "id":"251228454889939/insights/page_fan_adds_unique/day",
      "name":"page_fan_adds_unique",
      "period":"day",
      "values":[
        {
          "value":9,
          "end_time":"2012-05-29T07:00:00+0000"
        },
        {
          "value":5,
          "end_time":"2012-05-30T07:00:00+0000"
        }
      ],
      "title":"Daily New Likes",
      "description":"Daily The number of new people who have liked your Page (Unique Users)"
    },
    {
      "id":"251228454889939/insights/page_fan_adds/day",
      "name":"page_fan_adds",
      "period":"day",
      "values":[
        {
          "value":9,
          "end_time":"2012-05-29T07:00:00+0000"
        },
        {
          "value":5,
          "end_time":"2012-05-30T07:00:00+0000"
        }
      ],
      "title":"Daily New Likes",
      "description":"Daily The number of new people who have liked your Page (Total Count)"
    }
  ]
}
代码:

def parseJsonData(data):
    output_json = json.loads(data)
    for i in output_json:
        print i
        for k in output_json[i]:
            print k
为什么我不能访问如下对象:
output\u json[data][id]
? 如果我尝试以下操作,则会出现错误:

字符串标记必须是整数


粘贴的内容不是有效的JSON。“数据”后面有一个不匹配的[字符]

基于此,我猜数据可能不是您想象的那样。如果output_json[data]的值是一个列表,那么您将无法访问
output_json[data][id]
。相反,您必须执行类似于
output_json[data][0][id]
,其中[0]访问列表中的第一项。

就是您的“数据”键实际上是一个对象列表,您不能通过其“id”字段直接访问项目。您需要通过列表索引访问每个项目,例如:
output_json[“data”][0][“id”]

现在,如果您想通过“id”字段作为键来索引“data”的成员,那么您可以重新格式化数据:

# make "data" a dict {id: item, }, instead of list [item1, item2, ...]
output_json['data'] = dict((item['id'], item) for item in json_data['data'])

print output_json['data']
# {'251228454889939/insights/page_fan_adds_unique/day': ...

print output_json['data']['251228454889939/insights/page_fan_adds_unique/day']
# {'description': 'Daily The number of new p ...

# ways to loop over "data"
for id_, item in output_json['data'].iteritems():
    print id_, item

for item in output_json['data'].itervalues():
    print item
否则,您需要做的只是循环“数据”,因为索引和对象之间没有真正的相关性:

for item in output_json["data"]:
    print item['id']

# 251228454889939/insights/page_fan_adds_unique/day
# 251228454889939/insights/page_fan_adds/day

我确信它对OP来说是有效的json,但是OP只是根据缩进和括号发布了整个内容的一部分,它看起来不像。顶部有一个开放的括号,很明显底部有一个括号,但在这两者之间,是不匹配的[发生。它可能是一个切片,但如果是,则是一个不连续或格式不正确的切片。您只需添加一个结束
]
在最后一次
}
之前。缩进并不重要。我意识到标识对JSON并不重要。我只是说,在面向人类读者的正常JSON输出中,缩进通常是一致的,因此它不在这里这一事实表明它不是真实数据的一个简单片段。在任何情况下,很难理解如果OP没有发布有效数据,请回答以下问题:我们必须猜测粘贴数据的哪些部分是真实数据的一部分,哪些部分不是真实数据,从而找出真实数据的问题所在。我认为您遗漏了问题。除了他遗漏了一个
]之外,数据是有效的
,缩进问题很可能是OP是StackOverflow的新手,对代码格式不太了解。很容易看出代码应该是什么。有点模棱两可的是他想如何访问它。