繁体   English   中英

在Python中访问嵌套的JSON数据

[英]Accessing Nested JSON data in Python

给我的程序一个JSON类,我需要访问其中的某些项。

我不完全了解数据结构的类型,这可能是我的问题的一部分。

我尝试了json.dumps()json.load() ,这两个方法都会返回错误。 我什至尝试过._dict_

我收到以下错误:
"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.

我需要访问“ apiAccessToken”。

JSON数据:

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

我的代码:

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))

下面的代码应该做到这一点:

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'])

输出:

AxThk...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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