简体   繁体   中英

How to access a nested object in JSON via Python

I have a single entry in a JSON file. Within the "objects":[] list, I have "title": . I want to create a list that appends the value of every "title": in every JSON list. In the end, my goal is to have a list like this:

titles = [Mastercard, Mastercard, Alienware, Oppo, Alienware, ...]

{
  "ID": "ckksku7b800003e5m5vne0v7c",
  "DataRow ID": "ckkskgs561yh00sgog3vf1v29",
  "Labeled Data": "https://storage.labelbox.com/ckkqt5y5ulks20757tbduodbw%2Fe2510252-76ba-df14-193b-43d4527d705a-Screenshot%202021-02-05%20at%2017.46.56.png?Expires=1614084797277&KeyName=labelbox-assets-key-1&Signature=e69tqkxYhNNWkJL3TaxA9wjtYGM",
  "Label": {
    "objects": [
      {
        "featureId": "ckkskpirs0koo0y771e2veiik",
        "schemaId": "ckkskil310j1o0y8r0fu252jy",
        "title": "Mastercard",
        "value": "mastercard",
        "color": "#006FA6",
        "bbox": {
          "top": 631,
          "left": 891,
          "height": 25,
          "width": 40
        },
        "instanceURI": "https://api.labelbox.com/masks/feature/ckkskpirs0koo0y771e2veiik?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJja2txdDV5NmFtbm1iMDc0MGpsem03d2RwIiwib3JnYW5pemF0aW9uSWQiOiJja2txdDV5NXVsa3MyMDc1N3RiZHVvZGJ3IiwiaWF0IjoxNjEyODc1MTk3LCJleHAiOjE2MTU0NjcxOTd9.P-MyOgZidmSZSTLfhwpSsRfOaovsReP5MzpDtsrnWs0"
      },
      {
        "featureId": "ckkskqn410l530y770svj1z3g",
        "schemaId": "ckkskil310j1o0y8r0fu252jy",
        "title": "Mastercard",
        "value": "mastercard",
        "color": "#006FA6",
        "bbox": {
          "top": 374,
          "left": 1248,
          "height": 22,
          "width": 33
        },
        "instanceURI": "https://api.labelbox.com/masks/feature/ckkskqn410l530y770svj1z3g?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJja2txdDV5NmFtbm1iMDc0MGpsem03d2RwIiwib3JnYW5pemF0aW9uSWQiOiJja2txdDV5NXVsa3MyMDc1N3RiZHVvZGJ3IiwiaWF0IjoxNjEyODc1MTk3LCJleHAiOjE2MTU0NjcxOTd9.P-MyOgZidmSZSTLfhwpSsRfOaovsReP5MzpDtsrnWs0"
      },
      {
        "featureId": "ckkskshox0luo0y77gozzbuzu",
        "schemaId": "ckksks2sh0lrl0y8rcq970g3u",
        "title": "Alienware",
        "value": "alienware",
        "color": "#A30059",
        "bbox": {
          "top": 436,
          "left": 1901,
          "height": 31,
          "width": 86
        },
        "instanceURI": "https://api.labelbox.com/masks/feature/ckkskshox0luo0y77gozzbuzu?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJja2txdDV5NmFtbm1iMDc0MGpsem03d2RwIiwib3JnYW5pemF0aW9uSWQiOiJja2txdDV5NXVsa3MyMDc1N3RiZHVvZGJ3IiwiaWF0IjoxNjEyODc1MTk3LCJleHAiOjE2MTU0NjcxOTd9.P-MyOgZidmSZSTLfhwpSsRfOaovsReP5MzpDtsrnWs0"
      },
      {
        "featureId": "ckksktu8c0mhq0y8r6a82cjgm",
        "schemaId": "ckkskil300j1g0y8r5kbgguk9",
        "title": "OPPO",
        "value": "oppo",
        "color": "#1CE6FF",
        "bbox": {
          "top": 1101,
          "left": 1837,
          "height": 19,
          "width": 51
        },
        "instanceURI": "https://api.labelbox.com/masks/feature/ckksktu8c0mhq0y8r6a82cjgm?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJja2txdDV5NmFtbm1iMDc0MGpsem03d2RwIiwib3JnYW5pemF0aW9uSWQiOiJja2txdDV5NXVsa3MyMDc1N3RiZHVvZGJ3IiwiaWF0IjoxNjEyODc1MTk3LCJleHAiOjE2MTU0NjcxOTd9.P-MyOgZidmSZSTLfhwpSsRfOaovsReP5MzpDtsrnWs0"
      },
      {
        "featureId": "ckkxvfpv305j00y8k1hvn03e8",
        "schemaId": "ckksks2sh0lrl0y8rcq970g3u",
        "title": "Alienware",
        "value": "alienware",
        "color": "#A30059",
        "bbox": {
          "top": 505,
          "left": 2276,
          "height": 23,
          "width": 92
        },
        "instanceURI": "https://api.labelbox.com/masks/feature/ckkxvfpv305j00y8k1hvn03e8?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJja2txdDV5NmFtbm1iMDc0MGpsem03d2RwIiwib3JnYW5pemF0aW9uSWQiOiJja2txdDV5NXVsa3MyMDc1N3RiZHVvZGJ3IiwiaWF0IjoxNjEyODc1MTk3LCJleHAiOjE2MTU0NjcxOTd9.P-MyOgZidmSZSTLfhwpSsRfOaovsReP5MzpDtsrnWs0"
      }
    ],
    "classifications": []
  },
  ...
}

Update This is what I changed my code to per suggestion

    for i in range(0, len(data)):
        line = data[i]
        objects = line['Label']['objects']
        classes = [o['title'] for d in data for o in objects]
        print(classes)

This is the output:

['Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', ...
'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard']

['OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', ...
'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO', 'OPPO']

['Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard',  ...
'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard']

['Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', ...
'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard', 'Mastercard']

['Mastercard', 'Mastercard', 'Alienware', 'OPPO', 'Alienware', 'Mastercard', 'Mastercard', 'Alienware', 'OPPO', 'Alienware', 'Mastercard', 'Mastercard', 'Alienware', 'OPPO', 'Alienware', 
...
'Mastercard', 'Mastercard', 'Alienware', 'OPPO', 'Alienware']

It seems you should be able to do this with a list comprehension:

titles = [o['title'] for d in data for o in d['Label']['objects']]

Output (for a list containing the above object):

['Mastercard', 'Mastercard', 'Alienware', 'OPPO', 'Alienware']

Simple way is:

title = []

for j in data['Label']['objects']:
    title.append(j['title'])

output:

['Mastercard', 'Mastercard', 'Alienware', 'OPPO', 'Alienware']

if data is list of dict:

title = []

for d in data:
    for obj in d['Label']['objects']:
        title.append(obj['title'])

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