web-dev-qa-db-ja.com

python

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)

-------------------------------------------------- ----------------------------------------- update

これが今私が取り組んでいるものであり、単一の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 (_)
19
adam
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(_)
13
Filip Malczak

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)
18
Bo Sunesen