2017-10-08 4 views
-2

特定のレベルでJSONツリー内を検索する方法を学ぼうとしています。私は、次のJSONテンプレートの例があります。Pythonを使用して特定のレベルのJSONツリーを検索する方法

"Pair": { 
    "Instrument_A": { 
     "Segment A": { 
      "default": { 
       "value X": 1, 
       "value Z": 2, 
       "value Y": 3, 

      } 
     }, 
     "Segment B": { 
      "default": { 
       "value X": 1, 
       "value Z": 2, 
       "value Y": 3, 

      } 
     } 
    }, 
    "Instrument_B": { 
     "Segment A": { 
      "not-default": { 
       "value X": 1, 
       "value Z": 2, 
       "value Y": 3, 

      } 
     } 
    } 
} 

は、私の目標は、「デフォルト」に等しいが、例えば、あなたが機器Bの下4レベルで見ることができない名前を持つすべての配列をカウントすることで、セグメントAに「not-default」というオブジェクトがあります

+0

あなたが本当に重複するキーあなたの例では、 'Instrument_A'持っていますか - 文句を保存するものとし'json'パーサーを使ってそれを解釈する... –

+0

'not_default'は配列ではないオブジェクトです。 –

+0

@JonClements私はJSONの例を編集しました。このJSONでは多くのペアがあります。各ペアには複数のインストゥルメントがあり、それぞれのインストゥルメントには複数のセグメントがあります。その楽器は同じペアで繰り返されません。 – Epsilon

答えて

0

jsonパッケージを使用してjsonを解析し、辞書を繰り返し処理できます。

Python2:

import json 
json_str = "..." 
json_object = json.loads(json_str) 
for pair_k, pair_v in json_object.iteritems(): 
    for inst_k, inst_v in pair_v.iteritems(): 
     for seg_k, seg_v in inst_v.iteritems(): 
      if not seg_v == "default" 
       pass # do whatever you want - print, append to list, etc. 

のpython3:

import json 
json_str = "..." 
json_object = json.loads(json_str) 
for pair_k, pair_v in json_object.items(): 
    for inst_k, inst_v in pair_v.items(): 
     for seg_k, seg_v in inst_v.items(): 
      if not seg_v == "default" 
       pass # do whatever you want - print, append to list, etc. 
0
count = Counter() 

def count_keys(data): 
    if isinstance(data, dict): 
     for key, value in data.items(): 
      if key != 'default': 
       count[key]+=1 
      count_keys(data[key]) 

count_keys(data) 
print(count) 

プリント

Counter({'value X': 3, 'value Z': 3, 'value Y': 3, 'Segment A': 2, 'Pair': 1,'Instrument_A': 1, 'Segment B': 1, 'Instrument_B': 1, 'not-default': 1}) 
関連する問題