2017-04-18 16 views
1

私の監視ツールから現在のステータスを取得し、MSSQL DBでそれらを更新するスクリプトを作成しようとしています。 APIを呼び出すとjson形式の巨大な応答が得られます。PythonのAPIレスポンスからjsonデータを解析する方法は?

{ 
    "hoststatuslist": { 
    "recordcount": "1084", 
    "hoststatus": [ 
     { 
     "@attributes": { 
      "id": "XXXX" 
     }, 
     "host_id": "XXX", 
     "name": "XXXXX", 
     "display_name": "XXXXXXX", 
     "address": "XXXXXX", 
     "alias": "XXXXXX", 
     "status_text": "XXXXXXXXXXXXXXXXXXXXXXX", 
     etc. 
     }, 
     { 
     "@attributes": { 
      "id": "XXXX" 
     }, 
     "host_id": "XXX", 
     "name": "XXXXX", 
     "display_name": "XXXXXXX", 
     "address": "XXXXXX", 
     "alias": "XXXXXX", 
     "status_text": "XXXXXXXXXXXXXXXXXXXXXXX", 
     etc. 
     }, 
     etc. 
    ] 
    } 
} 

ご覧のとおり、1000個以上の属性を持つホストオブジェクトがあります。私はMSSQLを追加/更新できるように応答を解析したいと思います。私は、各ホストのhost_id、name、およびstatus_textを解析しようとしています。

私はこのPython - Parsing JSON Data Setのようなことを試みましたが、レスポンスオブジェクトに属性の読み取りまたはデコードがないというエラーが発生し続けます。

は、ここに私の現在のコードです:

import requests 
import json 

response = requests.get('url with API Key') 
decoded_response = response.read().decode("UTF-8") 
data = json.loads(decoded_response) 
jsonData = data["hoststatus"] 

for host in jsonData: 
    Name = host.get("name") 
    StatusText = host.get("status_text") 

誰もが、私は開いています別の言語やツールを使ってこれを行うための提案を持っている場合。私は約20 apisに電話し、すべてのステータス/その他の情報をDBに入れて、すべてが1つの場所にあるようにする必要があります。

ご了承ください。

答えて

2

ダニルは-kondratievは言った、あなたはresponse.jsonを使用することができます()、あなたは/デコードをエンコードする必要はありません。これはあなたのために働くでしょうか?私が正しくまたは私はあなたのポストを誤解した場合に自分自身を説明していない場合

import requests 

response = requests.get('url with keys') 

json_data = response.json() if response and response.status_code == 200 else None 

if json_data and 'hoststatuslist' in json_data: 
    if 'hoststatus' in json_data['hoststatuslist']: 
     for hoststatus in json_data['hoststatuslist']['hoststatus']: 
      host_name = hoststatus.get('name') 
      status_text = hoststatus.get('status_text') 
0

お試しください。 @のよ​​うにRequests docs

requests.get('https://api.github.com/user', auth=('user', 'pass')) 
>>>r.status_code 
200 
>>> r.encoding 
'utf-8' 
>>> r.json() 
{json} 
+0

は私はわからないんだけど、この記事は私にJSONデータを与えることは簡単です。私はすでにjsonデータからホスト名/ステータスを引き出すために必要なデータを持っています。 r.encodingを試してみるときに、私は200のステータスコード –

関連する問題