用JsonNode
你可以使用 com.fasterxml.jackson.databind
package 中的 JsonNode
:
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);
映射到 POJOJsonNode
例如,假设您要将 JsonNode
实例映射到以下类:
public class Payload {
private String foo;
// Getters and setters
}
这可以通过以下代码段实现:
Payload payload = mapper.treeToValue(event.getPayload(), Payload.class);
考虑Map<String, Object>
根据您的要求,您可以使用一个代替JsonNode
:Map<String, Object>
public class Event {
public String name;
public long timestamp;
public Map<String, Object> payload;
// Getters and setters
}
如果需要将 a 转换为 POJO,请使用:Map<String, Object>
Payload payload = mapper.convertValue(event.getPayload(), Payload.class);
根据 Jackson 文档,该方法在功能上类似于首先将给定值序列化为 JSON,然后将 JSON 数据绑定到给定类型的值,但应该更有效,因为不会(需要)发生完全序列化。但是,将使用与数据绑定相同的转换器(序列化程序和解串器),这意味着相同的对象映射器配置工作正常。convertValue()