Извлечь данные из вызова API и сохранить файл - PullRequest
0 голосов
/ 11 ноября 2019

после выполнения вызова API, я хочу извлечь конкретный ключ / значение и затем сохранить его в текстовом файле.

Что было сделано до сих пор: - (1) Оставить вызов 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)

вывод на печать (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"]

1 Ответ

1 голос
/ 11 ноября 2019

Вы сбросили JSON в str

Снова для работы с dict сначала загрузите json, а затем попробуйте

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