在python中,Jackson的替代品是什么?

2024-10-03 17:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Jackson语法分析器。我使用以下代码为一些java对象强制添加JSON键。在

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({ @JsonSubTypes.Type(value = A.class, name = "a"),
        @JsonSubTypes.Type(value = F.class, name = "f") })

我在Python中也有相同的集合类。我想在python中做同样的事情。但不确定python中的Jackson注释有哪些替代方法。在

我的要求是必须向restapi发送POST请求。我需要将java对象序列化为JSON。但是由于我的类结构有点不同,我并没有在java类中使用提到的所有JSON键。为了解决这个问题,我正在做的是,当JSON发现从java传递了“a”对象时,我在JSON中添加了“a”键。它对'F'对象做同样的事情。所以,我已经用上面提到的方法解决了这个问题。我想用Python实现同样的功能。在

是否有一些JSON解析器可以像上面提到的那样做,或者我必须遵循一些不同的方法来实现这一点?在


Tags: 对象方法代码nameidjsonvalueuse
2条回答

我认为在python生态系统中最相似的选项是jsonpickle

虽然它没有完整的杰克逊。 python的工程师和用户选择了另一个值得尊敬的视角,即使用无模式方法来解决问题,因此像Jackson这样的面向类型的序列化库在python中没有很强的等价性。在

attrs+cattrs与任务非常接近。在

复制一个cattr的例子

>>> import attr, cattr
>>>
>>> @attr.s(slots=True, frozen=True)  # It works with normal classes too.
... class C:
...     a = attr.ib()
...     b = attr.ib()
...
>>> instance = C(1, 'a')
>>> cattr.unstructure(instance)
{'a': 1, 'b': 'a'}
>>> cattr.structure({'a': 1, 'b': 'a'}, C)
C(a=1, b='a')

但它的能力不如Jackson,我还没有找到在序列化的json和反序列化的python对象之间映射属性的解决方案。在

相关问题 更多 >