java - 通用 JSON 对象转换

标签 java json jackson

我正在使用 ObjectMapper 反序列化一个 JSON 对象java中的类。 我得到了不同类型的对象(?扩展了某些东西)并且想知道是否有任何方法可以以某种通用方式对它们进行反序列化。 readValue方法获取输出对象类型的一些类类型对象,因此它是某种强类型的。

最佳答案

Jackson 不仅可以将类型删除的类作为目标类型,还可以将使用通常的“父类(super class)型标记”模式的 TypeReference 作为目标类型。来自 jackson 常见问题解答:

List<MyBean> result = mapper.readValue(src, new TypeReference<List<MyBean>>() { });

这适用于所有类型的通用类型,而不仅仅是 map 和集合。如果您正在考虑泛型类型,则可以这样做;这样您就只有一个类但有多个参数变化。

但听起来您可能真正想要的是支持反序列化多态类型;这也是支持(从 Jackson 1.5 开始,请参阅 http://wiki.fasterxml.com/JacksonPolymorphicDeserialization)。

编辑:给定另一个答案中的示例类,Jackson 的方式是:

import org.codehaus.jackson.annotate.JsonTypeInfo;

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
public abstract class Message
{
    protected Message(){ }
}

反序列化方式:

Message msg = objectMapper.readValue(json, Message.class);

获取消息的任何子类。并使用“objectMapper.writeValue();”进行序列化

关于java - 通用 JSON 对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386907/

相关文章:

iphone - iOS - 如何使 tableview 使用分页 API 输出?

MySQL 查询 - 通过 JSON 值获取订单 ID

java - Jackson:将枚举序列化为接口(interface)

java - Gson 有类似 WRITE_NULL_MAP_VALUES (Jackson) 的东西吗?

java - AMC 不报告任何成功读取

javascript - 里面的 HTML 表格只提供单个数据而不是完整数据

java - 使用正则表达式删除Java子字符串

javascript - 使用 JavaScript eval 解析 JSON

java - 使用约束注释验证 json 不起作用

java - 无法解析 google-services.json