当您使用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
语句?
通过手动更改项目来解决问题:
test = operations['Items'][0]
test['id'] = float(test['id'])
但这看起来很混乱。
答案 0 :(得分:1)
我假设您正在寻找从lambda处理函数返回。如果是这样,虽然不优雅,但你可以这样做:
json.loads(json.dumps(value, cls=JSONEncoder))
不是很棒,因为最终Lambda会将该结构转换回字符串(不确定是否有办法跳过转换为python结构的中间步骤)。