Возвращает строку Python в качестве тела ответа HTTP - PullRequest
0 голосов
/ 20 сентября 2018

Я использую AWS Lambda, а python-2.7 отвечает на AWS Api Gateway.Моя лямбда-функция должна возвращать ответ, похожий на следующий, но я пытаюсь указать правильную форму тела в ответе JSON:

    return_value = {
        "statusCode": 200,
        "isBase64Encoded": 'false',
        "headers": {"Content-Type": "application/json"},
        "body": {payload['note']}
    }

тип payload['note'] равен unicode, поэтому я неЯ не знаю, что именно поставить в скобки напротив body, так как я новичок в python и много пробовал, не имея возможности разобраться.Я попытался преобразовать его в строку, используя:

unicodedata.normalize('NFKD', payload['note']).encode('ascii', 'ignore')

Но это тоже не сработало.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вероятно, лучше сначала создать его, используя стандартные объекты, а затем преобразовать его в JSON при возврате.Например:

# coding=utf-8

import json

def aws_message(payload):
  message = dict(statusCode=200,
                 isBase64Encoded=False,
                 headers={"Content-Type": "application/json"},
                 body=payload['note'])
  return json.dumps(message)


if __name__=="__main__":
    payload = dict(note='something')
    print(aws_message(payload))

К сожалению, вы заметите, что я перешел от создания long-формы dict () к сокращению при построении заголовков внутри сообщения (это был быстрый и грязный пример),Вот результат:

C:\Python37\python.exe C:/dev/scratches/scratch_17.py
{"statusCode": 200, "isBase64Encoded": false, "headers": {"Content-Type": "application/json"}, "body": "something"}

Как видите, довольно просто построить объект простым для понимания способом, а затем позволить библиотеке json выполнить все преобразования в правильноОтформатированный ответ.Надеюсь, это поможет.

0 голосов
/ 20 сентября 2018

Во-первых, я считаю, что было бы неплохо преобразовать строку Unicode в строку Python, так как я не знаю, может ли остальная часть вашего кода обрабатывать Unicode в JSON.

Я думаю, что ваша проблемасвязанные с форматированием JSON.Как и в JSON, поле body должно содержать пары ключ-значение.

Попробуйте использовать:

return_value = {
    "statusCode": 200,
    "isBase64Encoded": 'false',
    "headers": {"Content-Type": "application/json"},
    "body": {"note": payload['note']}
}
...