在Jackson中映射动态json对象字段?
我在以下架构中具有json对象:
{ name: "foo",
timestamp: 1475840608763,
payload:
{
foo: "bar"
}
}
在这里,该payload
字段包含一个嵌入的json对象,并且该对象的模式是动态的,并且每次都不同。
的payload
对象是不同的API服务,以及不同的API服务的不同方法获得的原始输出。不可能将其映射到所有可能的值。
是否可能有如下所示的java类:
public class Event{
public String name;
public long timestamp;
public JsonObject payload;
}
或者类似的东西,以便我可以接收基本架构并对其进行处理,然后将其发送到相关类,该类将转换payload
为适当的预期类?
回答:
回答:
您可以JsonNode
从com.fasterxml.jackson.databind
包装中使用:
public class Event { public String name;
public long timestamp;
public JsonNode payload;
// Getters and setters
}
然后使用以下方法解析它:
String json = "{\"name\":\"foo\",\"timestamp\":1475840608763," + "\"payload\":{\"foo\":\"bar\"}}";
ObjectMapper mapper = new ObjectMapper();
Event event = mapper.readValue(json, Event.class);
回答:
例如,考虑您要将JsonNode
实例映射到以下类:
public class Payload { private String foo;
// Getters and setters
}
可以使用以下代码来实现:
Payload payload = mapper.treeToValue(event.getPayload(), Payload.class);
回答:
根据您的要求,您可以使用Map<String,
Object>代替JsonNode
:
public class Event { public String name;
public long timestamp;
public Map<String, Object> payload;
// Getters and setters
}
如果需要将a转换Map<String, Object>
为POJO,请使用:
Payload payload = mapper.convertValue(event.getPayload(), Payload.class);
根据Jackson的文档,该convertValue()
方法在功能上类似于先将给定值序列化为JSON,然后将JSON数据绑定到给定类型的值,但是由于不需要(不需要)进行完全序列化,因此该方法应更有效。但是,相同的转换器(序列化器和反序列化器)将用于数据绑定,这意味着相同的对象映射器配置有效。
以上是 在Jackson中映射动态json对象字段? 的全部内容, 来源链接: utcz.com/qa/413994.html