Какой метод использовать для фильтрации данных из этого json-типа вывода - PullRequest
0 голосов
/ 07 мая 2019

Одна из наших систем предоставляет мне данные, которые выглядят так:

[
    {
        "count": 1,
        "headings": [
            "name",
            "Hosts"
        ],
        "kind": "ApplicationInstance",
        "offset": 0,
        "results": [
            [
                "demo",
                [
                    "hostname2.domain.com",
                    "hostname3.domain.com",
                    "hostname4.domain.com",
                    "hostname1",
                    "hostname5",
                    "hostname7"
                ]
            ]
        ]
    }
]

Эти данные являются результатом команды cURL в скрипте Python.

Теперь я пытаюсь выяснить, как лучше всего выбрать все хосты (включая их доменные имена, если они есть), которые являются частью "Демо".

Как это:

hostname2.domain.com
hostname3.domain.com
hostname4.domain.com
hostname1
hostname5
hostnam8

Пока что я не смог добиться успеха с помощью grep или regex, но я вполне уверен, что я не использую его правильно.

Так что я ищу ваше руководство в том, что было бы лучшим подходом для решения этой проблемы. Любой из ваших указателей будет замечательно.

Ответы [ 2 ]

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

Вы можете использовать модуль json или даже струнные функции.

с модулем json:

import json
with open('test.json') as json_f:
    data = json.load(json_f)
    for p in data:
        results = p['results']
        results = ((results[0])[1])

for res in results:
    print(res)
1 голос
/ 07 мая 2019

Я не совсем уверен, каковы возможные значения вашего JSON, но вот решение, которое работает для размещенного словаря:

import requests
hosts = []
resp = requests.get("URL") # if you want to get it from URL
for elem in resp.json(): 
    list_of_results = elem["results"] 
    for result in list_of_results: 
         if result[0] == "demo": 
             hosts.extends(result[1])


print(hosts)                                                                                                                                                                                                
# => ['hostname2.domain.com', 'hostname3.domain.com', 'hostname4.domain.com', 'hostname1', 'hostname5', 'hostname7']

Если вы ищете решение просто для вашего опубликованного JSON, тогда вместо requests.get вы должны использовать json.loads:

import json

for elem in json.loads("JSON_STRING"):
    # same code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...