Boto3 上的三元运算符

问题描述 投票:0回答:1

看到一些与将典型 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))

代码按预期工作。只是想知道为什么使用三元运算符

json aws-lambda amazon-dynamodb boto3
1个回答
0
投票

我只是使用这种格式:

serializer = TypeSerializer()
serialized_item = serializer.serialize(item_to_store)

您可以在此处阅读有关 JSON 类型之间转换的更多信息:https://aws.amazon.com/blogs/database/exploring-amazon-dynamodb-sdk-clients/

© www.soinside.com 2019 - 2024. All rights reserved.