2016-07-20 5 views
0

以下は、Pythonを使用して "GBL_ACTIVE_CPU"の値を抽出するjsonコンテンツです。Pythonを使用して複数の階層を持つjsonから値を抽出する方法

{ 
     "test": "00.00.004", 
     "Metric Payload": [ 
      { 
       "ClassName": "test", 
       "SystemId": "test", 
       "uri": "http://test/testmet", 
       "MetaData": [ 
        { 
         "FieldName": "GBL_ACTIVE_CPU", 
         "DataType": "STRING", 
         "Label": "test", 
         "Unit": "string" 
        } 
       ], 
       "Instances": [ 
        { 
         "InstanceNo": "0", 
         "GBL_ACTIVE_CPU": "4" 
        } 
       ] 
     ]    
} 

私は以下のコードを試しましたが、動作しません。すべてのヘルプは高く評価されています

result = json.loads(jsonoutput) 
print(result) 
node = result["Metric Payload"]["Instances"]["GBL_ACTIVE_CPU"] 
print(node) 

が、私はエラーの下に出る:

TypeError: list indices must be integers or slices, not str 
+0

はそれをpoiintingための行に4 – skuzzy

答えて

4

JSON では "インスタンス" リストです。あなたは辞書のようにそれにアクセスしています。だから、それは2つの方法を持って静的な他の動的です。

あなたは静的な方法を使用したい場合は

: -

result = json.loads(jsonoutput) 
print(result) 
node = result["Metric Payload"][0]["Instances"][0]["GBL_ACTIVE_CPU"] 
print(node) 

あなたが動的な方法を使用したい場合: -

result = json.loads(jsonoutput) 
print(result) 
for metric in result["Metric Payload"]: 
    for inst in metric["Instances"]: 
     node = inst["GBL_ACTIVE_CPU"] 
     print(node) 
+0

感謝を浮遊ブレースを取り外します。 [Metric Payload] [0] ["Instances"] [0] ["GBL_SYSTEM_ID"] [Metric Payload]の後に[0]を観察します。これがなければ、動作しません。メトリックのペイロードもリストであり、私たちはそのインデックスも持っている必要があると私は信じています。 – Vikram

+0

@Vikramその偉大な –

+0

@Vikramはいそれは –

関連する問題