我试图从json文件中提取嵌套值.我想打印每个“id”键的每个值.我想我很接近,但是不能弄清楚为什么obj类型从一个dict变为一个列表,然后为什么我无法解析该列表.
这是一个链接到我正在使用的json: http://hastebin.com/ratevimixa.tex
这是一个链接到我正在使用的json: http://hastebin.com/ratevimixa.tex
这里是我当前的代码:
#!/usr/bin/env python #-*- coding: utf-8 -*- import json json_data = open('JubJubProductions.json','r+') jdata = json.loads(json_data.read().decode("utf-8")) def recursion(dict): for key,value in dict.items(): if type(value) == type(dict): if key != "paging": for key,value in value.items(): if isinstance (value,list): print key # place where I need to enter list comprehension? if type(value) == type(dict): if key == "id": print " id found " + value if key != "id": print key + " 1st level" if key == "id": print key else: if key == "id": print "id found " + value if __name__ == '__main__': recursion(jdata)
————————————————– —————————————–更新
这是我正在使用的,它会返回一个id值,但不是全部:
#!/usr/bin/env python #-*- coding: utf-8 -*- import json json_data = open('jubjubProductions','r+') jdata = json.loads(json_data.read().decode("utf-8")) def id_generator(d): for k,v in d.items(): if k == "id": yield v elif isinstance(v,dict): for id_val in id_generator(v): yield id_val if __name__ == '__main__': for _ in id_generator(jdata): print (_)
解决方法
def id_generator(dict): for k,v in dict.items(): if k == "id": yield v elif isinstance(v,dict): for id_val in id_generator(v): yield id_val
这将创建迭代器,它将产生密钥“id”下的任何级别的每个值.使用示例(打印所有这些值):
for _ in id_generator(some_json_dict): print(_)