4

「BoxDet」という名前の「BoxDet」のすべての要素をリストしたいと思います。目的は、次のようにリストすることです: BoxDet : ABC ...

私の JSON の一部:

{
   "id":1,
   "name":"BoxH",
   "readOnly":true,
   "children":[
      {
         "id":100,
         "name":"Box1",
         "readOnly":true,
         "children":[
            {
               "id":1003,
               "name":"Box2",
               "children":[
                  {
                     "id":1019,
                     "name":"BoxDet",
                     "Ids":[
                        "ABC",
                        "ABC2",
                        "DEF2",
                        "DEFHD",
                        "LKK"
                        ]
                    }
                ]
            }
        ]
    }
    ]
}

私の問題はまだ始まったばかりです。最初の { } のように深く進むことはできません。私のコード...

output_json = json.load(open('root.json'))
for first in output_json:
    print first
    for second in first:
        print second

...私にそのようなものを返します:

readOnly
r
e
a
d
O
n
l
y
children
c
h
i
l
d
r
e
n

...など。Box2 については触れずに、Box1 について深く掘り下げることさえできません。私はPython 2.7で作業しています

4

4 に答える 4

10

これにはツリー検索アルゴリズムが必要です。

def locateByName(e,name):
    if e.get('name',None) == name:
        return e

    for child in e.get('children',[]):
        result = locateByName(child,name)
        if result is not None:
            return result

    return None

この再帰関数を使用して、必要な要素を見つけることができます。

node = locateByName(output_json, 'BoxDet')
print node['name'],node['Ids']
于 2013-09-16T15:05:32.480 に答える