1

Stackoverflowメンバーの皆様、

私はこのJSON配列を持っており、それは次の項目で構成されています(基本的に):

{
    {
        'Name': 'x',
        'Id': 'y',
        'Unsusedstuff' : 'unused',
        'Unsusedstuff2' : 'unused2',
        'Children': []
    },
    {   'Name' : 'xx',
        'Id': 'yy',
        'Unsusedstuff' : 'unused',
        'Unsusedstuff2' : 'unused2',
        'Children': [{
            'Name': 'xyx',
            'Id' : 'yxy',
            'Unsusedstuff' : 'unused',
            'Unsusedstuff2' : 'unused2',
            'Children: []
        }

あなたは基本的な考えを理解します。次のコードを使用して、Pythonリストでこれをエミュレートします(ID、名前、構造を取得します)。

names = []
def parseNames(col):
    for x in col:
        if(len(x['Children'])> 0):
            names.append({'Name' : x['Name'], 'Id' : x['Id'], 'Children' : parseNames(x['Children'])})
        else:
            return {'Name' : x['Name'], 'Id' : x['Id']}

ただし、最初の「ルート」と最初のネストされたフォルダを返すだけで、それらすべてをループするわけではありません。

どうすればこれを修正できますか?

ご挨拶、

マット

4

3 に答える 3

3

私がこれを読む方法では、このツリーを、ID、名前、および子のみを持つノードのツリーに変換しようとしています。その場合、私が考えるのはノードのクリーニングです。

ノードをクリーンアップするには:

  1. 元のノードの名前とIDを使用してノードを作成します。
  2. 新しいノードの子を、元のノードの子のクリーンなバージョンに設定します。(これは再帰呼び出しです。)

コードでは、次のようになります。

def clean_node(node):
    return {
        'Name': node['Name'],
        'Id': node['Id'],
        'Children': map(clean_node, node['Children']),
    }

>>> print map(clean_node, data)
[{'Name': 'x', 'Children': [], 'Id': 'y'}, {'Name': 'xx', 'Children': [{'Name': 'xyx', 'Children': [], 'Id': 'yxy'}], 'Id': 'yy'}]

このように再帰的な問題を分解する方が簡単だと思います。グローバル変数を使おうとすると、単純なことが非常にすぐに混乱します。

于 2013-01-31T14:54:05.363 に答える
2

これをチェックして

def parseNames(col):
    for x in col:
        if(len(x['Children'])> 0):
            a = [{
                'Name' : x['Name'],
                'Id' : x['Id'],
                'Children' : x['Children'][0]['Children']
                }]
            parseNames(a)
        names.append({'Name' : x['Name'], 'Id' : x['Id']})
    return names

私が得る出力は

[{'Name': 'x', 'Id': 'y'}, {'Name': 'xx', 'Id': 'yy'}, {'Name': 'xx', 'Id': 'yy'}]
于 2013-01-31T13:20:06.693 に答える
0

これでJsonオブジェクトを解析できます:

import json
response = json.loads(my_string)

これresponseで、すべてのJsonオブジェクトのキーを含む辞書になりました。

于 2013-01-31T13:18:55.547 に答える