Jsonファイルからネストされた値をプルしようとしています。すべての「id」キーの各値を出力したい。私は近くにいると思いますが、obj型がdictからリストに変化する理由、そしてなぜそのリストを解析できないのか理解できません。ここに私が働いている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_var):
for k, v in dict_var.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(_)
JSONには、検索が必要なオブジェクトのリストが含まれている場合があります。
Python 2.7バージョン:
def item_generator(json_input, lookup_key):
if isinstance(json_input, dict):
for k, v in json_input.iteritems():
if k == lookup_key:
yield v
else:
for child_val in item_generator(v, lookup_key):
yield child_val
Elif isinstance(json_input, list):
for item in json_input:
for item_val in item_generator(item, lookup_key):
yield item_val
Python 3.xバージョン:
def item_generator(json_input, lookup_key):
if isinstance(json_input, dict):
for k, v in json_input.items():
if k == lookup_key:
yield v
else:
yield from item_generator(v, lookup_key)
Elif isinstance(json_input, list):
for item in json_input:
yield from item_generator(item, lookup_key)