简体   繁体   中英

Accessing Nested JSON data in Python

My program is given a JSON class and I need to access certain items within it.

I don't exactly understand what type of data structure it is, which may be part of my problem.

I've tried json.dumps() and json.load() , both of which return errors. I've even tried ._dict_ .

I've received below error:
"the JSON object must be str, bytes or bytearray, not 'LambdaContext'," "'LambdaContext' object has no attribute '_dict_'," and "Object of type 'LambdaContext' is not JSON serializable." I don't know what else to do with this JSON data.

I need to access the "apiAccessToken."

The JSON data:

{
  "context": {
    "System": {
      "apiAccessToken": "AxThk...",
      "apiEndpoint": "https://api.amazonalexa.com",
      "device": {
        "deviceId": "string-identifying-the-device",
        "supportedInterfaces": {}
      },
      "application": {
        "applicationId": "string"
      },
      "user": {}
    }
  }
}

My Code:

def postalCodeRetriever(intent, session, context):
    deviceId = session['user']['userId']
    jsoninfo = json.dumps(context)
    json_dict = json.loads(jsoninfo)
    print(str(json_dict))
    TOKEN = context["System"]
    print(TOKEN)
    URL = "https://api.amazonalexa.com/v1/devices/" + deviceId + "/settings/address/countryAndPostalCode"
    HEADER = {'Accept': 'application/json', 'Authorization': 'Bearer ' + TOKEN}
    response = urllib2.urlopen(URL, headers=HEADER)
    data = json.load(response)
    postalCode = data['postalCode']
    return build_response({}, build_speechlet_response(
                "hello", postalCode, None, True))

Below code should do it:

import json
data = json.dumps({
  "context": {
    "System": {
      "apiAccessToken": "AxThk...",
      "apiEndpoint": "https://api.amazonalexa.com",
      "device": {
        "deviceId": "string-identifying-the-device",
        "supportedInterfaces": {}
      },
      "application": {
        "applicationId": "string"
      },
      "user": {}
    }
  }
})
data_dict = json.loads(data)
print(data_dict['context']['System']['apiAccessToken'])

Output:

AxThk...

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