看到一些与将典型 JSON 对象序列化为 DynamoDB JSON 格式相关的代码。这里提供了链接 真正的问题是,当他可以将“item”输入到方法中时,为什么他要使用三元运算符(x if c then y)。
我在 Lambda 环境中进行了测试,发现当您创建一个 python 对象 (pyObject = someJSON) 并尝试获取其 .dict 属性时,您将收到属性错误。因此,只需将 pyObject 送入 .serialize 即可。为什么要三元运算符??
他不确定 .dict 属性是否可用甚至存在? 代码片段如下:
from boto3.dynamodb.types import TypeSerializer, TypeDeserializer
import json
serializer = TypeSerializer()
deserializer = TypeDeserializer()
# for building a DynamoDB JSON from a Python object
def serialize(item):
serialized_item = serializer.serialize(vars(item) if hasattr(item, '__dict__') else item)
return item if 'M' not in serialized_item else serialized_item['M']
# for building a plain JSON from a DynamoDB JSON
def deserialize(dynamodb_json_string):
return deserializer.deserialize({'M': dynamodb_json_string})
class MyItem:
def __init__(self, some_string_value=None, some_numeric_value=None):
self.my_key = some_string_value
self.my_other_key = some_numeric_value
def __str__(self):
return json.dumps(self, default=lambda x: x.__dict__)
if __name__ == '__main__':
my_classy_item = MyItem("my_string_value", 5)
my_string_item = json.loads('{"my_key": "my_string_value", "my_other_key" : 5}')
print(serialize(my_classy_item))
print(serialize(my_string_item))
代码按预期工作。只是想知道为什么使用三元运算符
我只是使用这种格式:
serializer = TypeSerializer()
serialized_item = serializer.serialize(item_to_store)
您可以在此处阅读有关 JSON 类型之间转换的更多信息:https://aws.amazon.com/blogs/database/exploring-amazon-dynamodb-sdk-clients/