2016-07-15 11 views
-4

ファイルからjsonをdata = json.load(fp)経由でロードした後、私はjsonにあったすべてのアイテムを繰り返し処理します。もちろん、すべての特殊なPythonシンボルは除きます。 これはどのように正しく行われますか?jsonオブジェクト内のすべての項目を繰り返します。

+3

あなたは "特別なPythonのシンボル" とはどういう意味ですか? jsonは定義上、 'int'、' str'、 'list'、' dict'などに対応するプリミティブデータ型しか保持しません。これ以外のものは任意の 'str'コンテンツとしてしか解釈できません。 。 – MisterMiyagi

+0

「適切に」とはどういう意味ですか?あなたはPythonの辞書(またはリスト)を持っていますので、どのように反復したりアクセスしたりしますか? –

答えて

5

dataは通常のコレクションである必要があります。したがって、他のリスト/ dict/whateverと同じ方法で繰り返します。それがloadから来たという事実は、あなたのために余分な要件を必要としません。ここで

は、原則的に類似している、loadsを使用する例です:

​​

結果:

1 
2 
3 

編集:あなたは、私がを反復処理する方法に、」求めている場合すべて深く入れ子にされたコレクションの中に含まれているものを含め、私のデータの値は? "というようなものがあります。

import json 
my_json_data = """[ 
    1, 
    { 
     "2": 3, 
     "4": [ 
      "5", 
      "6", 
      "7" 
     ] 
    }, 
    8, 
    9 
]""" 

def recursive_iter(obj): 
    if isinstance(obj, dict): 
     for item in obj.values(): 
      yield from recursive_iter(item) 
    elif any(isinstance(obj, t) for t in (list, tuple)): 
     for item in obj: 
      yield from recursive_iter(item) 
    else: 
     yield obj 

data = json.loads(my_json_data) 
for item in recursive_iter(data): 
    print(item) 

結果:

1 
5 
6 
7 
3 
8 
9 
関連する問題