简体   繁体   中英

Python iterate data over JSON

I am trying to use the following script to perform a API query which outputs JSON. I'm iterating the JSON to print the certain field (name) of all JSON objects. My scripts prints all the items (name, classification, details, etc) and not the value.

Script:

import requests
import json

query_url = 'https://IP-address/api/request'

data = {"query":"days>50", "type":"json", "size":3}
response = requests.post(query_url, json=data, verify=False)

json_data = json.loads(response.text)


for name in json_data[0]:
        print (name)

JSON:

    [
    { 
        "name": "Android", 
        "classification": "public", 
        "detail": "Tag1, Tag2, Tag3", 
        "days": 70, 
        "date_last": "2017-07-21 05:48:07 AM"
    },
    { 
        "name": "iPhone", 
        "classification": "public", 
        "detail": "Tag4, Tag5, Tag6", 
        "days": 75, 
        "date_last": "2017-07-21 05:48:07 AM"
    },
    {
        "name": "Microsoft", 
        "classification": "public", 
        "detail": "Tag3, Tag8, Tag9", 
        "days": 90, 
        "date_last": "2017-07-21 05:48:07 AM"
    }
] 

If you want to iterate json_data and print each name you need to access each dictionary value by key:

for d in json_data:
    print(d['name'])

Or if you're only looking to print the 'name' of a specific dictionary, eg the first in the JSON data, iteration isn't necessary:

print(json_data[0]['name'])

Say you wanted to have the output printed in a specific way, you can use str.format :

for d in json_data:
    print("Name: {} Days: {}".format(d['name'], d['days']))

My sense is that part of the problem is that we aren't clear on what we are looking at... so I suggest that we take a moment to look under the hood:

If we simply ask Python to show us each item in json_data, we see that Python has read in each dictionary in the list of dictionaries and will display them for us.

In [23]: for item in json_data:
    ...:     print(item)
    ...:
{'days': 70, 'classification': 'public', 'date_last': '2017-07-21 05:48:07 AM', 'name': 'Android', 'detail': 'Tag1, Tag2, Tag3'}
{'days': 75, 'classification': 'public', 'date_last': '2017-07-21 05:48:07 AM', 'name': 'iPhone', 'detail': 'Tag4, Tag5, Tag6'}
{'days': 90, 'classification': 'public', 'date_last': '2017-07-21 05:48:07 AM', 'name': 'Microsoft', 'detail': 'Tag3, Tag8, Tag9'}

From there, since each item is a dictionary, our next step is to then ask Python to extract just the values associated with the name key:

In [21]: for item in json_data:
    ...:     print(item['name'])
    ...:
    ...:
Android
iPhone
Microsoft

you should access value of key 'name'

below is the code

for i in json_data[0]:
    print (i['name'])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM