AWS Lambda python自定义响应编码

时间:2015-11-04 09:26:22

标签: python json amazon-web-services lambda boto

当您使用dynamodb的lambda函数查询数据并且其中包含二进制类型或十进制/数字类型时,下面的默认设置会提示他无法处理二进制或十进制的JSONEncoding错误。我可以使用我附加到json.dumps(data, indent=2, cls=JSONEncoder)

的一小段代码来解决
class JSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            if o % 1 > 0:
                return float(o)
            else:
                return int(o)
        return super(JSONEncoder, self).default(o)

但是在json.dumps()语句前面使用return,双json格式化响应并导致转义符号。要重复此问题,只需return data提示上述错误。

如何影响转换为json的return语句?

UPDATE:

通过手动更改项目来解决问题:

test = operations['Items'][0]
test['id'] = float(test['id'])

但这看起来很混乱。

1 个答案:

答案 0 :(得分:1)

我假设您正在寻找从lambda处理函数返回。如果是这样,虽然不优雅,但你可以这样做:

json.loads(json.dumps(value, cls=JSONEncoder))

不是很棒,因为最终Lambda会将该结构转换回字符串(不确定是否有办法跳过转换为python结构的中间步骤)。