我正在尝试编写一个脚本,它将从我们的监视工具中提取当前状态并在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。我正在尝试解析每个主机的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并将所有状态/其他信息放入数据库中,以便它们都在一个位置。
感谢任何帮助。
答案 0 :(得分: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')
答案 1 :(得分:0)
尝试。 Requests docs
requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>>r.status_code
200
>>> r.encoding
'utf-8'
>>> r.json()
{json}
答案 2 :(得分:0)
如果响应来自Flask应用,则需要使用response.get_json()
。
此外,请确保您具有Flask的更新版本。
答案 3 :(得分:0)
我认为,您不一定需要致电response.decode(...)
。
这应该满足:
import requests
response = requests.get('url with API Key') # Note: the timeout parameter is very useful for requests!
data = response.json()
if 'hoststatus' in data and isinstance(data['hoststatus'], list):
list_to_return = list() # we'll put the filtered results in this
for element in data['hoststatus']
current_item = { # create a dict of the 3 required values
host_id = element['host_id'],
name = element['name'],
status_text = element['status_text']
}
list_to_return.append(current_item) # add it to the return list
# list_to_return now has all of the required 3 properties stored for all items in an easily-accessible format
这可以更快(生成器)/以更紧凑的格式(列表理解)来完成,但是我试图写一些易于理解的东西。
对于这样的工作,Python是非常好的语言。