2017-10-25 5 views
2

私は現在、API呼び出しから出力される.jsonのチャンクを扱っています。 私はこのデータの特定の部分をつかんで、それらを変数に割り当てて、特定の再フォーマットされたメッセージでそれらを使用できるようにしようとしています。この出力での作業json出力(ワイルドカード)からのPython変数割り当て

{ 
    "content": { 
    "HTTP": { 
     "obsess": "1", 
     "check_command": "check_http", 
     "active_checks_enabled": "1", 
     "process_performance_data": "1", 
     "last_state_change": "1421870740", 
     "last_event_id": "1" 
    } 
    "PING": { 
     "obsess": "1", 
     "check_command": "check_ping!100.0,20%!500.0,60%", 
     "active_checks_enabled": "1", 
     "process_performance_data": "1", 
     "last_state_change": "1373404110", 
     "last_event_id": "0", 
    } 
} 

、私はいくつかの変数に対する変数の割り当てを作成しているが、私は、私が使用する必要があるかを見つけ出すことはできません。ここで

は私の.json出力が何であるかの一例ですHTTP、PINGなどに代わるワイルドカード

service_name = (service['content']['[]']['last_state_change']) 

これは簡単に行うことができますか?いくつかのjson呼び出しで、私はそれを知っています。[]はワイルドカードとして使うことができます。私は '[]'を '*'と[]で置き換えようとしましたが、まだ成功していません。

私の目標は、「HTTP」と「PING」が配置されている可能性のあるすべてのエントリから同じデータ(この例では「last_state_change」)を取得することです。

何かを代用するだけではこれができないのであれば、何か助けていただけたら嬉しいです。

答えて

2

あなたは結果dictを反復処理する必要があります。

changes = {} 
for x in service['content']: 
    changes[x] = service['content'][x]['last_state_change'] 
+0

これは完全に機能しました。ありがとうございました! – martydelaney3

0

あなたが必要とするすべては二つの鍵であり、あなたはそれらのキーであるかを正確にわかっている場合は、リストとしてあなたのコードでそれらを定義し、内容だけを取り出すことができそれらのための。

import json 
test = '''{ 
    "content": { 
     "HTTP": { 
      "obsess": "1", 
      "check_command": "check_http", 
      "active_checks_enabled": "1", 
      "process_performance_data": "1", 
      "last_state_change": "1421870740", 
      "last_event_id": "1" 
     }, 
     "PING": { 
      "obsess": "1", 
      "check_command": "check_ping!100.0,20%!500.0,60%", 
      "active_checks_enabled": "1", 
      "process_performance_data": "1", 
      "last_state_change": "1373404110", 
      "last_event_id": "0" 
     }, 
     "somethingelse": { 
      "obsess": "1", 
      "check_command": "check_ping!100.0,20%!500.0,60%", 
      "active_checks_enabled": "1", 
      "process_performance_data": "1", 
      "last_state_change": "1373404110", 
      "last_event_id": "0" 
     } 

    } 
}''' 
json = json.loads(test) 
print(json) 
keys = ['HTTP', 'PING'] 
for key in json['content']: 
    if key in keys: 
     last_key_change = json['content'][key]['last_state_change'] 
     print(key, last_key_change) 
+0

このオプションをありがとうございます。残念ながら、キーの数は静的ではなく、渡されるキーの数に応じて柔軟にする必要があります。 – martydelaney3

+0

この回答は、あなたの質問が策定されたような、望ましいキーのセットだけを検索するように調整されています。キーのリストを動的に作成し、last_state_changeの内部値を取得する場合は、最初の答えが必要です。ハードコードされたキー名に依存するJSON構造が変更された場合、両方の答えが失敗することに注意してください。 – BoboDarph

関連する問題