Home > OS >  Extracting multiple values from a JSON Object
Extracting multiple values from a JSON Object

Time:07-15

I have a JSON object that looks as such, stored in a variabled called results:

{
   "users":[
      {
         "pk":54297756964,
         "username":"zach_nga_test",
         "full_name":"",
         "is_private":false,
         "profile_pic_url":"https://instagram.fcxl1-1.fna.fbcdn.net/v/t51.2885-19/44884218_345707102882519_2446069589734326272_n.jpg?efg=eyJybWQiOiJpZ19hbmRyb2lkX21vYmlsZV9uZXR3b3JrX3N0YWNrX2JhY2t0ZXN0X3YyNDI6Y29udHJvbCJ9&_nc_ht=instagram.fcxl1-1.fna.fbcdn.net&_nc_cat=1&_nc_ohc=bdMav5vmkj0AX9lHIND&edm=ALdCaaIBAAAA&ccb=7-5&ig_cache_key=YW5vbnltb3VzX3Byb2ZpbGVfcGlj.2-ccb7-5&oh=00_AT9BXADjYsi8BkryuLhynAbrTCGmgjucZ6CJUxW4VS49QA&oe=62D6BC4F&_nc_sid=bfcd0c",
         "is_verified":false,
         "has_anonymous_profile_picture":true,
         "has_highlight_reels":false,
         "account_badges":[
            
         ],
         "latest_reel_media":0
      },
      {
         "pk":182625349,
         "username":"joesmith123",
         "full_name":"Joe Smith",
         "is_private":false,
         "profile_pic_url":"https://scontent-lga3-1.cdninstagram.com/v/t51.2885-19/264887407_23285995fef5595973_2438487768932865121_n.jpg?stp=dst-jpg_s150x150&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_cat=105&_nc_ohc=8YpjD2OKeoEAX_gXrh3&edm=APQMUHMBAAAA&ccb=7-5&oh=00_AT9UuhNl9LL_ANffkCcyNNFPv5_yK7J2FKQpRPmqEIri3w&oe=62D60038&_nc_sid=e5d0a6",
         "profile_pic_id":"2725348120205619717_182625349",
         "is_verified":false,
         "has_anonymous_profile_picture":false,
         "has_highlight_reels":false,
         "account_badges":[
            
         ],
         "latest_reel_media":0
      },
      {
         "pk":7324707263,
         "username":"Mike Jones",
         "full_name":"Mike",
         "is_private":false,
         "profile_pic_url":"https://scontent-lga3-1.cdninstagram.com/v/t51.2885-19/293689497_4676376015169654_5558066294974198168_n.jpg?stp=dst-jpg_s150x150&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_cat=110&_nc_ohc=ErZ3qsP0LsAAX96OT9a&edm=APQMUHMBAAAA&ccb=7-5&oh=00_AT8pFSsMfJz4Wpq5ulTCpou-4jPs3_GBqIT_SQA6YMaQ0Q&oe=62D61C4D&_nc_sid=e5d0a6",
         "profile_pic_id":"28817013445468058864_7324707263",
         "is_verified":false,
         "has_anonymous_profile_picture":false,
         "has_highlight_reels":false,
         "account_badges":[
            
         ],
         "latest_reel_media":1657745524
      }
   ]
 }

What I'm trying to do is extract the pk variable from all of them.

I know how to do it on a one by one basis as such:

ids = results['users'][1]['pk']
ids = results['users'][2]['pk']
ids = results['users'][3]['pk']

And so on. But let's say I wanted to extract all of those values in one swoop. I also won't necessarily know how many there are in each JSON object (while the example I used had three, it could be hundreds).

I'm so used to R where you can just doing something like ids = results$pk but don't know how to do this with Python.

EDIT BASED ON rv.kvetch answer

data = results

data = json.loads(data)

ids = [u['pk'] for u in data['users']]

print(ids)

But when I run it I get TypeError: the JSON object must be str, bytes or bytearray, not dict

CodePudding user response:

You can load the json string to a dict object, then use a list comprehension to retrieve a list of ids:

import json

# data is a string
data: str = """
...
"""

data: dict = json.loads(data)

ids = [u['pk'] for u in data['users']]

print(ids)

Output:

[54297756964, 182625349, 7324707263]
  • Related