2017-09-01 10 views
-2

json apiの応答で繰り返し処理しようとしています。必要なデータに到達できません。ネストされたJSONを繰り返し処理する

ここはapiの応答例です。 "私はそれが完全であるか有効なjsonではないことを知っています:)"

{ 
"status": "running", 
"reasons": [], 
"nodes": { 
    "Server1": { 
     "status": "running", 

私は単純なforループを使ってそれを繰り返しています!

for platforms in sbNode: 
request = urllib2.Request(API URL) 
json_res = json.load(urllib2.urlopen(request)) 
for node in json_res['nodes']: 
    print node['status'] 

と私は、エラーメッセージ

はTypeError取得しています:文字列のインデックスは整数

でなければならないとnormaly私はちょうどJSONデータを見るためにforループを印刷するが、それはただのServer1を印刷します。

私はここに迷ってしまいました....

ヘルプ!

ありがとうございました

答えて

1

json_res['nodes']は辞書です。辞書を反復するだけでキーが得られるので、nodeの最初の値は、たとえば'Server1'です。あなたがキーの両方をしたいと値の場合は、.items()を使用して反復することができます。

for key, node in json_res['nodes'].items(): 

あなただけのノードの値が必要な場合、あなたは.values()を使用することができます。

for node in json_res['nodes'].values(): 
+0

ここに行きます!どうもありがとう !! – Arriflex

0

あなたが深みのレベルが欠落していますjson_res['nodes']以来、あなたのデータのあなたはプリントサーバーの状態にネストされたループを追加することができ辞書

json_res['nodes'] = { 
    "Server1": { 
     "status": "running", 
     ... 

です:

for node in json_res['nodes']: 
    for server in node: 
     print server['status'] 
関連する問題