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

2024-05-19 02:24:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个脚本,该脚本将从我们的监视工具中提取当前状态并在MSSQL DB中更新它们。当我调用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。我正在尝试分析每个主机的主机id、名称和状态文本。

我试着做类似于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个api,并将所有状态/其他信息放入一个DB中,以便它们都位于一个位置。

如有任何帮助,我们将不胜感激。


Tags: 工具textname脚本idjsonhostdb
3条回答

正如@danil 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')

如果响应来自Flask应用程序,则需要使用response.get_json()

另外,确保你有一个更新版本的烧瓶。

试试看。Requests docs

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

相关问题 更多 >

    热门问题