2017-12-09 5 views
0

グーグルでグーグルで過ごしただけで、Pythonコードを書くだけで "コード"値だけを出力しようとしたので、実際には遅くなるはずです。私は複雑なjsonまたはdict構造から前にjson値を抽出しました。しかし、今私は精神的なブロックを打つ必要があります。奇妙にネストされたPythonの値を抽出する

これは私のjson構造です。

myjson=''' 

{ 
    "formatVersion" : "ABC", 
    "publicationDate" : "2017-10-06", 
"offers" : { 
"Service1" : { 
    "code" : "Service1", 
    "version" : "1a1a1a1a", 
    "index" : "1c1c1c1c1c1c1" 
}, 
"Service2" : { 
    "code" : "Service2", 
    "version" : "2a2a2a2a2", 
    "index" : "2c2c2c2c2c2" 
}, 
"Service3" : { 
    "code" : "Service4", 
    "version" : "3a3a3a3a3a", 
    "index" : "3c3c3c3c3c3" 
    } 
    } 
} 
''' 
#convert above string to json 
somejson = json.loads(myjson) 
print(somejson["offers"]) # I tried so many variations to no avail. 
+1

が、このことについて奇妙な何ですか?私には完全に普通のネストされた言葉のように見えます。唯一の珍しいことは、「オファー」もリストではなく、辞表であるということです。 –

+0

コピー/ペーストは私のために完璧に機能します。何が間違っている、あなたは何を期待しましたか? – glenfant

答えて

0

somejson["offers"]は辞書です。そのキーを印刷したいと思うようです。 Pythonの2で

print(somejson["offers"].keys()) 

のPython 3:Pythonの3にkeys()は、 '表示'、ではないリストであるため、

print([x for x in somejson["offers"].keys()]) 

は、Python 3では、あなたは、リストの内包表記を使用する必要があります。

+0

これは素晴らしいです!ありがとう。そして、 "バージョン"の値をリストする方法? –

+0

最も内側の辞書( '' code "'、 '" version "'、 '' index "'を持つもの)のエントリをリストする場合は、例えば次のようにすることができます。 'print([someXson [" offers "]。values()])'のxのための[x "" version "]。これは彼の答えで@glenfantによって言及されました。 –

+0

あなたは命の恩人です。ありがとう、Shaun。 –

0

jsonのサービスの数が不明な場合は、おそらくこのトリックを行う必要があります。

import json 
myjson=''' 

{ 
    "formatVersion" : "ABC", 
    "publicationDate" : "2017-10-06", 
"offers" : { 
"Service1" : { 
    "code" : "Service1", 
    "version" : "1a1a1a1a", 
    "index" : "1c1c1c1c1c1c1" 
}, 
"Service2" : { 
    "code" : "Service2", 
    "version" : "2a2a2a2a2", 
    "index" : "2c2c2c2c2c2" 
}, 
"Service3" : { 
    "code" : "Service4", 
    "version" : "3a3a3a3a3a", 
    "index" : "3c3c3c3c3c3" 
    } 
    } 
} 
''' 
#convert above string to json 
somejson = json.loads(myjson) 


#Without knowing the Services: 
offers = somejson["offers"] 
keys = offers.keys() 

for service in keys: 
    print(somejson["offers"][service]["code"]) 
+0

すべてが同じですか?あなたが見せたり、期待される出力の例を与えるコードですか? – CodeCollector

2

それとも、あなたが "コード" の低いものにしたい場合:

>>> [s['code'] for s in somejson['offers'].values()] 
['Service1', 'Service2', 'Service4'] 
関連する問題