java - jackson 在python中的替代品是什么?

标签 java python json annotations jackson

我正在使用 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/

相关文章:

python - ipython 中的制表符完成列表元素

javascript - 最佳 AJAX TreeView

javascript - 将垂直堆积条转换为水平堆积条 D3.js v4

javascript - node-red 将 json 字符串解析为 msg.payload

java - 将 HQL 'in' 限制转换为条件

python - 使用Python从邮件附件中一次性提取ZIP文件中的CSV文件

python - 如何用累积梯度更新模型参数?

java - 单节点hadoop设置Ubuntu 10.04

java - 具有多个键和值字段的 SortedMap

java - 如何使用 JsonPath (JayWay) 连接 json 元素