Печать JSON данных с python там, где нет ключа и значения - PullRequest
0 голосов
/ 29 апреля 2020

В настоящее время я работаю с некоторыми JSON данными, которые представляют проблему, мне нужно напечатать имя устройства в моем скрипте рядом с плавающей запятой, я могу легко напечатать плавающую задержку, так как есть ключ: значение Однако имя устройства не совпадает, поэтому я не могу понять, как его распечатать, особенно если оно меняется для каждого API-адреса. Я перебираю цикл для получения данных

Данные, которые я хочу распечатать, "DEVICE123-Et10"

См. JSON данные ниже,

{
  "notifications": [
    {
      "timestamp": "511513234234",
      "path_elements": [
        "Devices",
        "DEVICE1",
        "versioned-data",
        "connectivityMonitor",
        "status",
        "hostStatus",
        "DEVICE123-Et10",
        "defaultStats"
      ],
      "updates": {
        "httpResponseTime": {
          "key": "httpResponseTime",
          "value": {
            "float": 0
          }
        }
      }
    },
    {
      "timestamp": "15153324243",
      "path_elements": [
        "Devices",
        "DEVICE1",
        "versioned-data",
        "connectivityMonitor",
        "status",
        "hostStatus",
        "DEVICE123-Et10",
        "defaultStats"
      ],
      "updates": {
        "packetLoss": {
          "key": "packetLoss",
          "value": {
            "int": 0
          }
        }
      }
    },
    {
      "timestamp": "151522324234",
      "path_elements": [
        "Devices",
        "DEVICE1",
        "versioned-data",
        "connectivityMonitor",
        "status",
        "hostStatus",
        "DEVICE123-Et10",
        "defaultStats"
      ],
      "updates": {
        "latency": {
          "key": "latency",
          "value": {
            "float": 0.238756565643454
          }
        }
      }
    },
    {
      "timestamp": "158056745645645",
      "path_elements": [
        "Devices",
        "DEVICE1",
        "versioned-data",
        "connectivityMonitor",
        "status",
        "hostStatus",
        "DEVICE123-Et10",
        "defaultStats"
      ],
      "updates": {
        "jitter": {
          "key": "jitter",
          "value": {
            "float": 0.03500000213213
          }
        }
      }
    }
  ]
}

Текущий код, который я использую, чтобы l oop просмотреть список URL-адресов и получить время ожидания:

     jsonrequest = requests.get(url, cookies=cookies, verify=False).json()
     try:
         print(jsonrequest['notifications'][2]['updates']['latency']['value']['float'])
     except KeyError:
         print(jsonrequest['notifications'][1]['updates']['latency']['value']['float'])```

1 Ответ

0 голосов
/ 29 апреля 2020

Я пошел дальше и написал сценарий, чтобы делать то, что вы хотели. Он проходит по всем уведомлениям до тех пор, пока не будет найдено обновление с задержкой. Затем он выбирает второй из последнего элемента из списка, поскольку он всегда второй и последний.

import json
import requests

data = requests.get(url, cookies=cookies, verify=False).json()
notifications = data["notifications"]
for notification in notifications:
    if notification["updates"].get("latency"):
        latency = notification["updates"]["latency"]["value"]["float"]
        name = notification["path_elements"][-2]
        print(name, latency)

...