我正在使用 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 中也有相同的集合类。我想在 python 中做同样的事情。但不确定 Python 中可用的 Jackson 注释的替代方案是什么。
我的要求是我必须向 REST API 发送 POST 请求。我需要将 java 对象序列化为 JSON。但是由于我的类结构有点不同,所以我没有在 Java 类中提到的所有 JSON 键。为了解决这个问题,我正在做的是当它发现“A”对象是从 java 传递时,我在 JSON 中添加“a”键。它对“F”对象做同样的事情。所以,我已经按照上面提到的方式实现了解决方案。我想在 Python 中实现同样的目标。
是否有一些可用的 JSON 解析器与上面提到的做同样的事情,或者我必须遵循一些不同的方法?
最佳答案
我强烈推荐 pydantic 库,它还提供了添加数据验证的可能性。
它使用起来非常简单直接,即使您只将它用于 json 编码/解码也是如此。
https://pypi.org/project/pydantic/
import json
from datetime import datetime
from pydantic import BaseModel
class MyInnerClass(BaseModel):
timestamp: datetime
some_string: str
class MyOuterClass(BaseModel):
inner_instance: MyInnerClass
other_string: str
# Class to json
test_class = MyOuterClass(inner_instance=MyInnerClass(timestamp=datetime(2022, 6, 22), some_string="some"),
other_string="other")
json_string = test_class.json()
# Json to Class
input_string = '{"inner_instance": {"timestamp": "2022-06-22T00:00:00", "some_string": "some"}, "other_string": "other"}'
loaded_class = MyOuterClass(**json.loads(input_string))
关于java - jackson 在python中的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46214035/