TypeError:<botocore.response.streamingbody object =“” at =“” 0x7f81898af438 =“”>不可序列化JSON

时间:2018-12-04 18:49:00

标签: json amazon-web-services python-3.5 boto3 amazon-polly

我正在尝试使用python创建一个 AWS Lambda 函数,该函数将从某些API接收文本并返回一个包含AudioStream对象的JSON。为此,我正在使用 AWS Polly 。目前,我可以在机器上从AWS上获取AudioStream,并且可以正常工作。

import boto3,json

polly= boto3.client('polly')
text='<speak>hey there wassup </speak>'

spoken_text=polly.synthesize_speech(Text=text,OutputFormat='mp3',VoiceId='Aditi',TextType='ssml')

newdata=json.dumps(spoken_text)
# return newdata
print(type(spoken_text))

但是当我尝试使用此代码片段以JSON格式返回响应时,却出现了错误。

/usr/bin/python3.5 /talker/aditi.py
Traceback (most recent call last):
  File "/talker/aditi.py", line 9, in <module>
    newdata=json.dumps(spoken_text)
  File "/usr/lib/python3.5/json/__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python3.5/json/encoder.py", line 198, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python3.5/json/encoder.py", line 179, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <botocore.response.StreamingBody object at 0x7f81898af438> is not JSON serializable

Process finished with exit code 1

任何指导将不胜感激。
感谢进阶!

注意:为了使用AWS Polly,我创建了一个特殊用户,并授予他AmazonPollyReadOnlyAccess和AmazonPollyFullAccess访问权限。

1 个答案:

答案 0 :(得分:0)

您需要使用以下函数传递它:

newdata=bytes(json.dumps(spoken_text))

,并且要读取返回的值时,需要使用以下方法:

print(returned_value.read())