TypeError:не является JSON-сериализуемым - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь создать функцию AWS Lambda , используя python, которая должна получить текст от некоторого API и вернуть JSON, содержащий объект AudioStream.Для этого я использую AWS Polly .В настоящее время я могу получить AudioStream от AWS на своем компьютере, и он работает нормально.

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 голосов
/ 25 марта 2019

Вам нужно передать его, используя следующую функцию:

newdata=bytes(json.dumps(spoken_text))

, и когда вы хотите прочитать возвращаемое значение, вам нужно использовать следующий метод:

print(returned_value.read())
...