如何在Python中解析来自API响应的json数据?

问题描述:

我正在尝试编写一个脚本,它将从我们的监视工具中提取当前状态并在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,并将所有状态/其他信息放入数据库中,以便它们都位于同一位置。

任何帮助表示赞赏。

像@ DANIL,康德拉季耶夫说,你可以使用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') 

试试。 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状态代码我也没有收到任何回应 –