Reputation: 1519
I have a service urlA that if I call gives me below json response which has list of servers in it keyed by datacenter. In future, I can have more keys and more servers for each keys.
{
"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"]
}
Similarly I have another service urlB which gives similar response but different set of servers:
{
"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"]
}
I want to extract all the server names from the above json response from both the url's which will be like this:
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
So I started off like this but I am kinda confuse on how to extract all the servers by parsing json response from both the service url without specifying any key in hardcoded way?
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
Upvotes: 0
Views: 68
Reputation: 3609
>>> 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"
]
Upvotes: 1
Reputation: 539
You want to flatten your array. With something like the following:
hosts = [value for value_set in json_data.values() for value in value_set]
This will give you a list of all the hosts. You can then proceed with the rest of your task from there.
Upvotes: 1