简体   繁体   中英

How can I iterate over nested json dicts?

I've been trying to figure out how I can iterate over a json like object, so I could get a user id by its name.

json

{
    "ApiSearchResult": [
        {
            "totalNumberResults": 55,
            "type": "User",
            "searchResults": [
                {
                    "firstName": "shashank",
                    "name": "0o_shashank._o0",
                    "uid": 81097836
                },
                {
                    "firstName": "Shahnawaz",
                    "name": "0shahnawaz.0",
                    "uid": 83697589
                },
                {
                    "firstName": "Ashu",
                    "name": "ashu.-3",
                    "uid": 83646061
                },
                {
                    "bgImage": "photoalbum_491396460_user82597906-1-jpeg.jpg",
                    "firstName": "Garfield",
                    "name": "beast.boy",
                    "uid": 82597906
                },
                {
                    "firstName": "Bharath",
                    "name": "bharath_mohan69",
                    "uid": 80197615
                },
                {
                    "bgImage": "photoalbum_481041410_user79819261-1-jpg.jpg",
                    "firstName": "Wille-ICE",
                    "name": "blowhole",
                    "uid": 79819261
                }
           ]
       }
    ]
 }

Python

def getidbyname(name):
    event = response['ApiSearchResult'][0]['searchResults'][0]
    for key, value in event.iteritems():
        if value == name: continue
        elif key == "uid":
            return value

But, this won't work, I've never really worked with this many nested elements.

This might work if your response is already a python dictionary:

def getidbyname(name):
    for event in data["ApiSearchResult"][0]["searchResults"]:
        if event["name"] == name:
            return event["uid"]

If your input is a text value, you need to use json.loads(response) to get a python dictionary out of it.

def getidbyname(name): 
    for i in data['ApiSearchResult'][0]['searchResults']:
        if i['name'] == name:
            return i['uid']

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