Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过使用python解析json响应来提取所有服务器?_Python_Json_Http - Fatal编程技术网

通过使用python解析json响应来提取所有服务器?

通过使用python解析json响应来提取所有服务器?,python,json,http,Python,Json,Http,我有一个服务urlA,如果我调用它,它会给出下面的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

我有一个服务urlA,如果我调用它,它会给出下面的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"]
}
我想从上述两个url的json响应中提取所有服务器名称,如下所示:

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
所以我是这样开始的,但我有点困惑,如何通过解析来自服务url的json响应来提取所有服务器,而不以硬编码的方式指定任何键

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=[json\u数据中的值集的值。值集中的值的值()]


这将为您提供所有主机的列表。然后,您可以从那里继续执行其余的任务。

您想展平阵列。使用类似以下内容:

>>> 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"
]
hosts=[json\u数据中的值集的值。值集中的值的值()]


这将为您提供所有主机的列表。然后,您可以从那里继续执行其余的任务。

明白了。我有两个URL,需要调用并解析它们的json响应。我可以将所有内容合并到一个hosts变量中吗?更新了我的问题以使其更清晰。您应该能够通过
master\u list=hosts\u a+hosts\u b
简单地将列表添加到一起。这个hosts变量是python中的一个列表?或者不是j_a和j_b,而是
data=json.loads([a响应]…
后跟
data.update(json.loads([b响应])…
@flash yes hosts是一个列表。明白了。我有两个URL需要调用并解析它们的json响应。我可以将所有内容合并到一个hosts变量中吗?更新了我的问题以更清晰。你应该可以通过
master\u list=hosts\u a+hosts\b
明白了。这个hosts变量是一个列表,对吗在python中,或者代替j_a和j_b,只需
data=json.loads([a响应]…
后跟
data.update(json.loads([b响应])…
@flash yes 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"
]