在python中解码Google Speech API响应

时间:2013-11-23 07:37:02

标签: python json google-api

我正在尝试在Python中使用Google Speech API。我加载了一个像这样的.flac文件:

url = "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US"
audio = open('temp_voice.flac','rb').read()
headers = {'Content-Type': 'audio/x-flac; rate=44100', 'User-Agent':'Mozilla/5.0'}
req = urllib2.Request(url, data=audio, headers=headers)
resp = urllib2.urlopen(req)
system("rm temp_voice.wav; rm temp_voice.flac")
print resp.read()

输出:

{“status”:0,“id”:“”,“假设”:[{“话语”:“今天是星期三”,“置信度”:0.75135982}]}

有人可以教我如何提取和保存文本“今天是星期三”作为变量并打印出来吗?

3 个答案:

答案 0 :(得分:4)

您可以使用json.loads将JSON数据转换为dict,就像这样

data = '{"status":0,"id":"","hypotheses":[{"utterance":"Today is Wednesday","confidence":0.75135982}]}'
import json
data = json.loads(data)
print data["hypotheses"][0]["utterance"]

答案 1 :(得分:0)

如果响应以字符串形式出现,那么您可以将其评估为字典,(为安全起见,最好使用literal_eval库中的ast代替):

>>> d=eval('{"status":0,"id":"","hypotheses":[{"utterance":"Today is Wednesday","confidence":0.75135982}]}')
>>> d
{'status': 0, 'hypotheses': [{'confidence': 0.75135982, 'utterance': 'Today is Wednesday'}], 'id': ''}  

>>> h=d.get('hypotheses')                                                                            
>>> h                                                                                                 
[{'confidence': 0.75135982, 'utterance': 'Today is Wednesday'}]                                       
>>> for i in h:                                                                                       
...    print i.get('utterance')
... 
Today is Wednesday

当然,如果它已经是字典,那么您不需要进行评估,请尝试使用print type(response),其中response是您获得的结果。

答案 2 :(得分:0)

检索输出的问题看起来有点复杂。首先,resp是实例的类型,但是如果手动复制输出,则是dictionary-> list->字典。如果将resp.read()分配给新变量,您将获得长度为0的类型字符串。它会发生,因为一旦使用(打印),所有输出都会消失。因此,必须在获得谷歌api的响应后立即进行json解码。如下:

resp = urllib2.urlopen(req)

text = json.loads(resp.read())[“hypotheses”] [0] [“utterance”]

在我的案例中就像魅力一样;)