2017-03-04 6 views
-2
{ 
    "id": "9", 
    "children": [{ 
     "id": "8", 
     "children": [{ 
      "id": "7", 
      "children": [{ 
       "id": "6", 
       "children": [ 
        { 
         "id": "0", 
         "type": "isPathForward" 
        }, 
        { 
         "id": "2", 
         "children": [{ 
          "id": "1", 
          "type": "maze_moveForward" 
         }], 
         "type": "DO" 
        }, 
        { 
         "id": "5", 
         "children": [{ 
          "id": "4", 
          "children": [{ 
           "id": "3", 
           "type": "turnLeft" 
          }], 
          "type": "maze_turn" 
         }], 
         "type": "ELSE" 
        } 
       ], 
       "type": "maze_ifElse" 
      }], 
      "type": "DO" 
     }], 
     "type": "maze_forever" 
    }], 
    "type": "program" 
} 

上記の有効なJSONは基本的にAST(抽象構文木)であり、上記のJSONのために正確に下記のような2続いノード)左の子、その後、3)右の子抽象構文木を格納しているJSONから情報を抽出する際に助けが必要

Program 
maze_forever 
DO 
maze_ifElse 
isPathforward 
Do 
maze_moveForward 
Else 
maze_turn 
turn_Left 

私はPythonで発電機を使用してみましたJSONで働いていないが、順序がで失われますそのプロセスはdictに変換されます。
これに対してPythonの実装を記述できますか?

UPDATE !!!!

これまでのところ、私が試してみました:(JSON上記)

輸入JSON json_string = json.loads

when i type : 
for i in json_string: 
...  print(i) 
... 


OUTPUT 


type 
id 
children 

を、私はまた、上記

import pandas as pd 
d=pd.read_json('{ "id": "9", "children": [{  "id": "8",  "children": [{   "id": "7",   "children": [{    "id": "6",    "children": [     {      "id": "0",      "type": "isPathForward"     },     {      "id": "2",      "children": [{       "id": "1",       "type": "maze_moveForward"      }],      "type": "DO"     },     {      "id": "5",      "children": [{       "id": "4",       "children": [{        "id": "3",        "type": "turnLeft"       }],       "type": "maze_turn"      }],      "type": "ELSE"     }    ],    "type": "maze_ifElse"   }],   "type": "DO"  }],  "type": "maze_forever" }], "type": "program"}') 


>>> d 
output : 
              children id  type 
0 {'type': 'maze_forever', 'id': '8', 'children'... 9 program 

両方のケースを試してみました:

私はすべての子供が持つように再帰的に子供の中に入る方法を知らない内部に1人以上の子供。私が検索したほとんどの答えは、上記のJSONと同じようにネストされたJSONについて説明しません。

+2

注文は失われず、決してそこにはありませんでした。 JSONオブジェクトは保証されていません。順序を気にする場合は、配列を使用するか、反復処理時に適切なキーをソートします。 – jonrsharpe

+2

あなたのためにいくつかのコードを書きたいと思うようです。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常、ポスターが既に問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、期待される出力、実際に得られる出力(出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/questions/how-to-ask)を確認してください。 – TigerhawkT3

+0

上記のjsonはAbstract Syntax Treeを表しています。上記のように情報を抽出する方法があれば非常に役に立ちます.thanks! –

答えて

1

最も明白な実装は、再帰関数のようになります。私たちは子どもたちに再帰前に、現在の構造のタイプを印刷している

>>> def process(data): 
...  if 'type' in data: print data['type'] 
...  if 'children' in data: 
...   for child in data['children']: 
...    process(child) 
... 
>>> j = json.load(open('test.json', 'r')) 
>>> process(j) 
program 
maze_forever 
DO 
maze_ifElse 
isPathForward 
DO 
maze_moveForward 
ELSE 
maze_turn 
turnLeft 

注意。

+0

私はPythonの初心者です。さらに、過去6ヶ月にわたってJavaで1日2回しかコーディングしていません。これは実際に私の最初のデータサイエンスプロジェクトであり、私の宿題ではありません。あなたのエレガントなソリューションは非常に有用で正直なところ私は再帰スキルについて恥ずかしいです。どのような空想的なパッケージを使用せずに、注文は完全に復元されている&それは私が望んでいた&私はpreorder、DFSなどについて考えていたが、私は再帰を知っていたが、私は非常にPythonの構文であなたのコードの2行目だと、わかる !!!今日のことを学びました。ありがとうございました! –

+0

これは動作します!!!! –

関連する問題