You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python中获取并解析wit.ai的JSON响应以提取特定值

解决Wit.ai接口JSON响应的特定值提取问题

看起来你在调用Wit.ai的API获取对话意图和实体信息,但当前的代码存在潜在的报错风险,我来帮你调整一下:

先看你的原始代码

import requests
import json

r = requests.get('https://api.wit.ai/message?v=20160918&q=%s' % speech, headers={"Authorization": wit_ai_token})
print r.text
json_resp = json.loads(r.text)
entities = None
intent = None
if 'entities' in json_resp:
    entities = json_resp['entities']
    intent = json_resp['entities']['time']['value']

问题分析

这段代码有两个容易触发错误的点:

  • 直接用[]索引字典键,如果entities里没有time字段,或者time的结构不是你预期的单个对象,会直接抛出KeyError
  • Wit.ai返回的entities下的字段几乎都是数组类型(因为可能识别到多个同类型实体),不是单个包含value的对象,直接取['time']['value']肯定会报错

修正后的代码

import requests
import json

# 假设speech和wit_ai_token已经提前定义
r = requests.get('https://api.wit.ai/message?v=20160918&q=%s' % speech, headers={"Authorization": wit_ai_token})
print(r.text)
json_resp = json.loads(r.text)

# 用get方法安全获取entities,不存在则返回空字典
entities = json_resp.get('entities', {})
intent = None

# 先检查time实体是否存在,且数组不为空
if 'time' in entities and len(entities['time']) > 0:
    # 取数组第一个元素的value,用get避免字段缺失
    intent = entities['time'][0].get('value')

关键改进点

  • 使用dict.get(key, default)代替直接索引,即使键不存在也不会报错,而是返回你指定的默认值
  • 针对Wit.ai的返回结构,先确认time数组有内容,再取第一个元素的value
  • 代码更健壮,能处理实体缺失、识别结果为空等边缘情况

举个例子,如果你的响应是:

{"_text":"is it too late to book a flight tomorrow","entities":{"time":[{"value":"2024-05-22T00:00:00.000-07:00","type":"value"}]}}

修正后的代码会正确提取到2024-05-22T00:00:00.000-07:00作为intent的值。

内容的提问来源于stack exchange,提问作者mrritunjay pathak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:31:38