У меня есть URL-адрес службы, который, если я звоню, дает мне ниже ответ json, в котором есть список серверов, в котором указан центр обработки данных. В будущем у меня может быть больше ключей и больше серверов для каждого ключа.
{
"abc": ["goldy11.abc.host.com", "goldy12.abc.host.com"],
"pqr": ["goldy21.pqr.host.com", "goldy22.pqr.host.com"],
"def": ["goldy31.def.host.com", "goldy32.def.host.com"],
"jhk": ["goldy41.jhk.host.com", "goldy42.jhk.host.com"]
}
Точно так же у меня есть другой сервис urlB, который дает аналогичный ответ, но другой набор серверов:
{
"abc": ["goldy81.abc.host.com", "goldy82.abc.host.com"],
"pqr": ["goldy91.pqr.host.com", "goldy92.pqr.host.com"],
"def": ["goldy71.def.host.com", "goldy72.def.host.com"],
"jhk": ["goldy51.jhk.host.com", "goldy52.jhk.host.com"]
}
Я хочу извлечь все имена серверов из приведенного выше ответа json из обоих URL-адресов, которые будут такими:
goldy11.abc.host.com
goldy12.abc.host.com
goldy21.pqr.host.com
goldy22.pqr.host.com
goldy31.def.host.com
goldy32.def.host.com
goldy41.jhk.host.com
goldy42.jhk.host.com
goldy81.abc.host.com
goldy82.abc.host.com
goldy91.pqr.host.com
goldy92.pqr.host.com
goldy71.def.host.com
goldy72.def.host.com
goldy51.jhk.host.com
goldy52.jhk.host.com
Итак, я начал так, но я немного запутался в том, как извлечь все серверы, проанализировав ответ json как из URL-адреса службы, не указав какой-либо ключ жестко закодированным способом?
import json
import requests
responsea = requests.get("service-url-a")
responseb = requests.get("service-url-b")
json_data_a = json.loads(responsea.text)
json_data_b = json.loads(responseb.text)
# how can I combine both json_data_a and json_data_b response in the hosts list
hosts = [value for value_set in json_data_a.values() for value in value_set]
print hosts






Вы хотите сгладить свой массив. Что-то вроде следующего:
hosts = [value for value_set in json_data.values() for value in value_set]
Это даст вам список всех хостов. Затем вы можете приступить к остальной части вашей задачи оттуда.
Вы должны иметь возможность просто добавлять списки вместе через master_list = hosts_a + hosts_b
понятно. И эта переменная hosts представляет собой список прямо в python?
Или вместо j_a и j_b просто data = json.loads([a response]... с последующим data.update(json.loads([b response])...
@flash yes hosts — это список.
@Wyrmwood, ты уверен, что это работает? Я пытался, но он показывает только серверы для ответа b. import json import requests responsea = requests.get("service-url-a") responseb = requests.get("service-url-b") json_data = json.loads(responsea.text) json_data.update(json.loads(responseb.text)) hosts = [value for value_set in json_data.values() for value in value_set] print hosts
Нет. У вас одинаковые ключи, поэтому обновление перезапишет их.
>>> import json
>>> a = """{
... "abc": ["goldy11.abc.host.com", "goldy12.abc.host.com"],
... "pqr": ["goldy21.pqr.host.com", "goldy22.pqr.host.com"],
... "def": ["goldy31.def.host.com", "goldy32.def.host.com"],
... "jhk": ["goldy41.jhk.host.com", "goldy42.jhk.host.com"]
... }"""
>>> b = """{
... "abc": ["goldy81.abc.host.com", "goldy82.abc.host.com"],
... "pqr": ["goldy91.pqr.host.com", "goldy92.pqr.host.com"],
... "def": ["goldy71.def.host.com", "goldy72.def.host.com"],
... "jhk": ["goldy51.jhk.host.com", "goldy52.jhk.host.com"]
... }"""
>>> data_a = json.loads(a)
>>> data_b = json.loads(b)
>>> print(json.dumps([value for values in list(data_a.values()) + list(data_b.values()) for value in values], indent=True))
[
"goldy21.pqr.host.com",
"goldy22.pqr.host.com",
"goldy11.abc.host.com",
"goldy12.abc.host.com",
"goldy41.jhk.host.com",
"goldy42.jhk.host.com",
"goldy31.def.host.com",
"goldy32.def.host.com",
"goldy91.pqr.host.com",
"goldy92.pqr.host.com",
"goldy81.abc.host.com",
"goldy82.abc.host.com",
"goldy51.jhk.host.com",
"goldy52.jhk.host.com",
"goldy71.def.host.com",
"goldy72.def.host.com"
]
понятно. У меня есть два URL-адреса, для которых мне нужно вызвать и проанализировать их ответ json. можно ли объединить все в одну переменную hosts? обновил мой вопрос для большей ясности.