Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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_Python 3.x - Fatal编程技术网

使用Python解析包含三层键的JSON时出错

使用Python解析包含三层键的JSON时出错,python,json,python-3.x,Python,Json,Python 3.x,我正在构建一个Python程序,将一些对社交媒体API的调用解析为CSV,我遇到了一个问题,其中一个键在层次结构中的上面有两个键。我在Eclipse中使用PyDev运行代码时遇到此错误 Traceback (most recent call last): line 413, in <module> main() line 390, in main postAgeDemos(monitorID) line 171, in postAgeDemos age0T

我正在构建一个Python程序,将一些对社交媒体API的调用解析为CSV,我遇到了一个问题,其中一个键在层次结构中的上面有两个键。我在Eclipse中使用PyDev运行代码时遇到此错误

Traceback (most recent call last):
  line 413, in <module>
    main()
  line 390, in main
postAgeDemos(monitorID)
  line 171, in postAgeDemos
    age0To17 = str(i["ageCount"]["sortedAgeCounts"]["ZERO_TO_SEVENTEEN"])
KeyError: 'ZERO_TO_SEVENTEEN'
下面是我试图解析的JSON示例

{"ageCounts":[{"startDate":"2016-01-01T00:00:00","endDate":"2016-01-02T00:00:00","numberOfDocuments":520813,"ageCount":{"sortedAgeCounts":{"ZERO_TO_SEVENTEEN":3245,"EIGHTEEN_TO_TWENTYFOUR":4289,"TWENTYFIVE_TO_THIRTYFOUR":2318,"THIRTYFIVE_AND_OVER":70249},"totalAgeCount":80101}},{"startDate":"2016-01-02T00:00:00","endDate":"2016-01-03T00:00:00","numberOfDocuments":633709,"ageCount":{"sortedAgeCounts":{"ZERO_TO_SEVENTEEN":3560,"EIGHTEEN_TO_TWENTYFOUR":1702,"TWENTYFIVE_TO_THIRTYFOUR":2786,"THIRTYFIVE_AND_OVER":119657},"totalAgeCount":127705}}],"status":"success"}
这里又是一个换行符,所以它更容易阅读

{"ageCounts":[{"startDate":"2016-01-01T00:00:00","endDate":"2016-01-02T00:00:00","numberOfDocuments":520813,"ageCount":
{"sortedAgeCounts":{"ZERO_TO_SEVENTEEN":3245,"EIGHTEEN_TO_TWENTYFOUR":4289,"TWENTYFIVE_TO_THIRTYFOUR":2318,"THIRTYFIVE_AND_OVER":70249},"totalAgeCount":80101}},
{"startDate":"2016-01-02T00:00:00","endDate":"2016-01-03T00:00:00","numberOfDocuments":633709,"ageCount":
{"sortedAgeCounts":{"ZERO_TO_SEVENTEEN":3560,"EIGHTEEN_TO_TWENTYFOUR":1702,"TWENTYFIVE_TO_THIRTYFOUR":2786,"THIRTYFIVE_AND_OVER":119657},"totalAgeCount":127705}}],"status":"success"}
我试图从

中删除[排序的AgCeNets ]。
age0To17 = str(i["ageCount"]["sortedAgeCounts"]["ZERO_TO_SEVENTEEN"])
但我还是犯了同样的错误。我删除了0-17部分来测试其他年龄段,我也得到了同样的错误。我尝试从JSON中删除所有下划线,然后使用不带下划线的键

我还尝试将str()从调用移动到打印输出的位置,以转换为字符串,但错误仍然存在

有什么想法吗?这部分实际上不是JSON键,可能是所有CAP都有问题,还是我只是在做一些愚蠢的事情?任何其他的代码改进都是受欢迎的,但我仍然坚持这一点

如果你还需要看别的东西,请告诉我。提前感谢您的帮助。

编辑(此功能有效):

s
是一个字符串,其中包含您的JSON。

已编辑(此操作有效):



s
是一个包含JSON的字符串。

print str(i[“ageCount”][“sortedAgeCounts”])的输出是什么?您确定该数组的每个元素都有这些键吗?在这种情况下要做的事情是开始使用
print
语句或调试器来查看哪里出了问题。尝试捕捉
KeyError
并只检查失败的行。我觉得您尝试解析的
JSON
比其他任何东西都有问题。是的@Two-bitalchest,我刚刚浏览了JSON,所有这些都在每个实例中。它只是重复同样的事情一遍又一遍,这取决于你打电话的天数。这可能是真的@NickilMaveli,但这是我唯一要做的事。:)
print str(i[“ageCount”][“sortedAgeCounts”])
的输出是什么?您确定该数组的每个元素都有这些键吗?在这种情况下要做的事情是开始使用
print
语句或调试器来查看哪里出了问题。尝试捕捉
KeyError
并只检查失败的行。我觉得您尝试解析的
JSON
比其他任何东西都有问题。是的@Two-bitalchest,我刚刚浏览了JSON,所有这些都在每个实例中。它只是重复同样的事情一遍又一遍,这取决于你打电话的天数。这可能是真的@NickilMaveli,但这是我唯一要做的事。:)这给了我一个关于“年龄计数”的关键错误。它在JSON中只出现一次,这就是为什么我的循环构建在它之上的原因。我试图将[0]移动到ageCount之后,并将“I”保留在前面,以维持循环,如下图所示
age0To17=str(I[“ageCount”][0][“sortedAgeCounts”][“ZERO_to_Seven”])
但随后我在0I上得到一个关键错误,将我的切换到与你的匹配,现在我得到了这个错误
age0To17=str(JSON[i][0][“ageCount”][“sortedAgeCounts”][“ZERO\u TO_seven”])类型错误:字符串索引必须是整数
确保在JSON中迭代JSON,即JSON:i中的i的
,但它仍然给我关键错误。您能提供您试图执行的确切代码吗?或者只是提供它的任何链接。这给了我一个关于“年龄计数”的关键错误。它在JSON中只出现一次,这就是为什么我的循环构建在它之上的原因。我试图将[0]移动到ageCount之后,并将“I”保留在前面,以维持循环,如下图所示
age0To17=str(I[“ageCount”][0][“sortedAgeCounts”][“ZERO_to_Seven”])
但随后我在0I上得到一个关键错误,将我的切换到与你的匹配,现在我得到了这个错误
age0To17=str(JSON[i][0][“ageCount”][“sortedAgeCounts”][“ZERO\u TO_seven”])类型错误:字符串索引必须是整数
确保在JSON中迭代JSON,即JSON:
i中的i的
,但它仍然给我关键错误。您能提供您试图执行的确切代码吗?或者只是提供它的任何链接。
age0To17 = str(i["ageCount"]["sortedAgeCounts"]["ZERO_TO_SEVENTEEN"])
JSON=json.loads(s)        
for i in JSON:
    print str(JSON[i][0]["ageCount"]["sortedAgeCounts"]["ZERO_TO_SEVENTEEN"])