我使用 Jackson解析器将Java对象解析为 JSON 。我正在使用以下代码强行为某些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中也有相同的set类。我想在python中做同样的事情。但不确定在python中可用的Jackson注释的替代方案。
我的要求是我必须向REST API发送POST请求。我需要将java对象序列化为JSON。但是由于我的类结构有点不同,我没有在java类中提到的所有JSON键。为了解决这个问题我正在做的是当我发现'A'对象从java传递时,我在JSON中添加'a'键。对'F'对象做同样的事情。所以,我已经按照上面提到的方式实现了解决方案。我想在Python中实现同样的目标。
是否有一些JSON解析器可用,与上面提到的相同,或者我必须遵循一些不同的方法?
答案 0 :(得分:1)
我有同样的问题,找不到合适的。 所以我写了pyson
https://tracinsy.ewi.tudelft.nl/pubtrac/Utilities/wiki/pyson
它仍在开发中,我会在此过程中添加新功能。 杰克逊是巨大的,因此不能完全替代杰克逊。我只是在可能的情况下以杰克逊风格实现我需要的东西。
答案 1 :(得分:0)
我认为您在python生态系统中获得的最相似的选择是jsonpickle
尽管不如杰克逊完整。 python工程师和用户选择了另一种受人尊敬的观点,即使用无模式的方法来解决问题,因此面向输入的序列化库(例如Jackson)在Python中没有很强的等效性。
答案 2 :(得分:0)
在此处复制一个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对象之间映射属性。