CMS
CMS

Reputation: 285

Python - Searching JSON

I have JSON output as follows:

{
"service": [{
    "name": ["Production"],
    "id": ["256212"]
}, {
    "name": ["Non-Production"],
    "id": ["256213"]
}]
}

I wish to find all ID's where the pair contains "Non-Production" as a name.

I was thinking along the lines of running a loop to check, something like this:

data = json.load(urllib2.urlopen(URL))


for key, value in data.iteritems():

if "Non-Production" in key[value]: print key[value]

However, I can't seem to get the name and ID from the "service" tree, it returns:

   if "Non-Production" in key[value]: print key[value]
   TypeError: string indices must be integers

Assumptions:

Essentially the goal is to obtain a list of ID's of non production "services" in the most optimal way.

Upvotes: 0

Views: 103

Answers (2)

e-nouri
e-nouri

Reputation: 2626

Whatever I see JSON I think about functionnal programming ! Anyone else ?! I think it is a better idea if you use function like concat or flat, filter and reduce, etc.

Egg one liner:

[s.get('id', [0])[0] for s in filter(lambda srv : "Non-Production" not in srv.get('name', []), data.get('service', {}))]

EDIT:

I updated the code, even if data = {}, the result will be [] an empty id list.

Upvotes: 0

Pēteris Caune
Pēteris Caune

Reputation: 45092

Here you go:

data = {
    "service": [
        {"name": ["Production"],
         "id": ["256212"]
        },
        {"name": ["Non-Production"],
         "id": ["256213"]}
    ]
}

for item in data["service"]:
    if "Non-Production" in item["name"]:
        print(item["id"])

Upvotes: 1

Related Questions