【问题标题】:Unable to marshal response: JSONDecodeError无法编组响应:JSONDecodeError
【发布时间】:2020-09-15 04:07:27
【问题描述】:

我有一个触发 Lambda 的 AWS Stepfunction。不幸的是,我无法正确解码输入:

从 AWS Stepfunction 到 Lambda 的输入:

{
  "MessageNumber": 0,
  "message": {
    "MessageId": "ae5b5d59-6829-4a19-b508-2ba35614e2de",
    "ReceiptHandle": "AQEBJsP+Et+WcgstIR9kkA3sH4UDoxYYcoDT2YYa30K87Rx2wSEFaZNg3CNdsjE18LSDMNXWg7VoV/s/p0bSL0PaUxQ0FV34RAwavG0iGMi",
    "MD5OfBody": "a726ec7fdda41e454850580e1a2cf4b4",
    "Body": "{'stage': 'tst', 'directory': '\\\\\\\\mydomain\\\\data\\\\results', 'variableFilters': ['\\\\filters\\\\x1.txt', '\\\\filters\\\\a1.txt']}",
    "Attributes": {
      "SenderId": "xxx",
      "ApproximateFirstReceiveTimestamp": "xxx",
      "ApproximateReceiveCount": "2",
      "SentTimestamp": "xxx",
      "SequenceNumber": "xxx",
      "MessageDeduplicationId": "xxx",
      "MessageGroupId": "1"
    }
  }
}

Python代码如下:

def lambda_handler(event, context):
    print(f'Received Event: {event}')
    try:
        body = json.loads(event.get('message').get('Body'))
        stage = body["stage"]
        directory= body["directory"]
    except Exception as e:
        return (e)

我得到错误:

{
  "errorMessage": "Unable to marshal response: JSONDecodeError('Expecting property name enclosed in double quotes: line 1 column 2 (char 1)') is not JSON serializable",
  "errorType": "Runtime.MarshalError"
}

有人知道如何解决这个问题吗?

提前致谢!

【问题讨论】:

  • 不,都是关于“身体”部分的

标签: python json aws-lambda


【解决方案1】:

您必须将body 中的单引号替换为双引号。 因为在有效的 JSON 中,字符串以 " 开头和结尾

body = "{'stage': 'tst', 'directory': '\\\\\\\\mydomain\\\\data\\\\results', 'variableFilters': ['\\\\filters\\\\x1.txt', '\\\\filters\\\\a1.txt']}"
body = json.loads(body.replace('\'', '"'))

【讨论】:

  • 没错,但是如何从给定的输入结构中获取“body”的内容呢?像 body = json.loads(event.replace('\'', '"')) 这样的东西是不可能的,因为事件类型 dict 没有属性替换。
  • body = json.loads(event.get('message').get('Body').replace('\'', '"'))
猜你喜欢
  • 2021-06-09
  • 2020-08-28
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
相关资源
最近更新 更多