读取JSON文件的KeyError

时间:2017-07-10 05:53:41

标签: json django webhooks

编辑:这里有关于如何收到JSON的更多背景信息。我正在使用ApiAI API为他们的平台生成请求,他们有一个方法来检索它,如下所示:

# instantiate ApiAI
ai = apiai.ApiAI(CLIENT_ACCESS_TOKEN)

# declare a request obect, fill in in lower lines
request = ai.text_request()

# send ApiAI the request
request.query = "{}".format(textobject.body)

# get response from ApiAI
response = request.getresponse()
response_decode = response.read().decode("utf-8")
response_data = json.loads(response_decode)

我正在编写Django中的webapp并尝试通过发布到webhook的JSON响应进行读取。在解码之后,通过JSON读取的代码是:

if response_data['result']['action'] != "":
    Request.objects.create(
        request = response_data['result']['resolvedQuery']
    )

当我尝试运行此代码时,出现此错误:

KeyError: 'result'

就行了

if response_data['result']['action'] != "":

我很困惑,因为在我看来,'result'应该是正在阅读的这个JSON的有效密钥:

{  
   'id':'65738806-eb8b-4c9a-929f-28dc09d6a333',
   'timestamp':'2017-07-10T04:59:46.345Z',
   'lang':'en',
   'result':{  
      'source':'agent',
      'resolvedQuery':'Foobar',
      'action':'Baz'
   },
   'alternateResult':{  
      'source':'domains',
      'resolvedQuery':'abcdef',
      'actionIncomplete':False,
   },
   'status':{  
      'code':200,
      'errorType':'success'
   }
}

我的程序中是否还有其他方法可以阅读此JSON?

2 个答案:

答案 0 :(得分:1)

尝试:

import JSON
if 'action' in response_data:
    parsed_data = json.loads(response_data)
    if parsed_data['result']['action'] != "":
        Request.objects.create(request = parsed_data['result']['resolvedQuery'])

答案 1 :(得分:1)

感谢大家的想法。事实证明,我试图实现ApiAI API的另一个错误是,这导致了这个错误。它现在通过JSON罚款,我正在使用@ sasuke的建议。