【问题标题】:Extract data from API call and save file从 API 调用中提取数据并保存文件
【发布时间】:2019-11-11 08:44:30
【问题描述】:

在对 API 进行后调用后,我想提取特定的键/值并将其保存到文本文件中。

到目前为止已经做了什么:- (1)Rest api调用和返回列表

import requests
import json

#API details
url = "http://192.168.1.100:9792/api/scan"
body = json.dumps({"service":"scan", "user_id":"1", "action":"read_all", "code":"0"})
headers = {'Content-Type': 'application/json'}

#Making http post request
response = requests.post(url, headers=headers, data=body, verify=False)

#Decode response.json() method to a python dictionary for data process utilization
dictData = response.json()

#Json string
json_str = json.dumps(dictData)
print(json_str)

print(json_str) 输出如下

{
  "node": [
    {
      "id": "123",
      "ip": "10.101.10.1",
      "model": "md1",
      "type": "basic",
      "name": "aaa"
    },
    {
      "id": "456",
      "ip": "10.101.10.2",
      "model": "sp3",
      "type": "extra",
      "name": "bbb"
    },
    {
      "id": "789",
      "ip": "1.1.1.1",
      "model": "md1",
      "type": "basic",
      "name": "ccc"
    },
    {
      "id": "101",
      "ip": "2.2.2.2",
      "model": "advance",
      "type": "sw1",
      "name": "ddd"
    }
  ],
  "status": "success"
}

(2)提取特定的键/值,这是我从列表中获取键/值时出错的地方

for i in json_str["node"]:
   if i["type"]=="basic" or i["type"]=="sw1" :
      print(i["name"],i["ip"], i["type"])

我遇到了错误

for i in json_str["node"]:
TypeError: string indices must be integers, not str

我尝试更改为 json_str[0] 但它仍然没有返回我想要的键/值。 请进一步协助。谢谢

只需使用字典中已有的 dictData 即可

for i in dictData["node"]

【问题讨论】:

  • “for i in json_str”应该是“for i in dictData”,不是吗?
  • dictData 已经是 json 解码的字典。你不需要在上面使用json.dumps()。只需访问dictData。你已经调用了那个变量json_str,所以你不知道它是一个字符串而不是一个字典吗?
  • 我想我之前已经测试过了...只是因为我遇到了错误...我可能会混淆我的代码并且不知道这条线...感谢@trixn 指出我的错误.. .

标签: python json parsing for-loop extract


【解决方案1】:

您将 json 转储到 str

再次使用dict,首先加载json,然后尝试

json_str = json.dumps(dictData)
json_dict = json.loads(json_str)
print(json_dict)

【讨论】:

  • 它工作...可以将输出保存到文本文件中吗?与 open("output.txt", "w') 一起使用?
  • 是的,你可以保存它
  • dictData 已经包含 json 解码响应。为什么要将其转换为字符串只是为了再次将其转换回来? OP 应该只访问dictData 而不是json_str
  • @trixn 是的,确实如此。并且将部分转换为字符串已经完成。我只是再次提到这句话以消除他的疑问。
  • 是的......你们俩都是对的......经过漫长的一天......我把自己与 dict 和字符串对象的负载和转储混淆......在你提到并告诉我之后。 ..我知道我的错误...感谢您指出...谢谢你们...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2019-09-29
  • 2015-03-06
相关资源
最近更新 更多