Есть ли способ фильтрации данных JSON с помощью Python - PullRequest
0 голосов
/ 07 мая 2019

Я использую PRTG HTTP API для извлечения информации о датчиках, моя цель - отфильтровать датчики, имеющие это значение

<status>Down</status>

До сих пор я читал много ссылок в Stack and Googlingно я не смог применить ни одно из этих решений, поэтому вставка всех кодов, которые я пробовал, была бы бесполезной, однако, тот, который имеет больше смысла для меня, это

Структура JSON похожаthis

{
  "prtg-version": "19.1.49.1966",
  "treesize": 17701,
  "status%3Ddown": [
    {
      "group": "SOME GROUP",
      "device": "SOME SWITCH",
      "sensor": "Uptime",
      "status": "Down",
      "status_raw": 5
    },
    {
      "group": "SOME GROUP",
      "device": "SOME SWITCH",
      "sensor": "System Health Memory",
      "status": "Up",
      "status_raw": 3
    },
  ]
}

Теперь вот код

import json
import requests
url = "https://prtg.c3ntro.com/api/table.jsoncontent=status=down&username=usr&passhash=hash&count=100"
response = requests.get(url)
data = response.json()

d = data
result_dict = [d for d in data['status%3Ddown'] if d['status'] == 'Down']
print(result_dict)


#Code has been fixed and now it works

Теперь распечатывается только датчики состояния Down

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Должно работать понимание списка:

[d for d in data['status%3Ddown'] if d['status'] == 'Down']

возвращает все записи в списке "status%3Ddown", которые содержат "status": "Down":

[{'device': 'SOME SWITCH',
  'group': 'SOME GROUP',
  'sensor': 'Uptime',
  'status': 'Down',
  'status_raw': 5}]
0 голосов
/ 07 мая 2019
d = data["prtg-version", "treesize", "status%3Ddown"]

Эта строка кода пытается получить доступ к элементу с буквальным трехчастным ключом "prtg-version", "treesize", "status%3Ddown", которого, конечно, не существует.

Похоже, вы просто хотите это:

d = data["status%3Ddown"]
...