我在以下架构中具有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
您可以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
到POJO例如,考虑您要将JsonNode
实例映射到以下类:
public class Payload {
private String foo;
// Getters and setters
}
可以使用以下代码来实现:
Payload payload = mapper.treeToValue(event.getPayload(), Payload.class);
Map<String, Object>
根据您的要求,您可以使用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数据绑定到给定类型的值,但是由于不需要(不需要)进行完全序列化,因此该方法应更有效。但是,相同的转换器(序列化器和反序列化器)将用于数据绑定,这意味着相同的对象映射器配置有效。
假设我有这样的物体 我正在使用RestTemboard类从URL中获取json,如下所示: 之后,我想使用jackson对象映射器将json字符串转换为一个对象 将实体类作为第二个参数传递 问题是我应该如何编写ExampleJson实体来处理get-Showed json?我试过这样上课,但似乎不管用。 我得到了这样一个例外:
你好,我有下一个json响应: 正如你所见,我有一个资源对象,里面有许多不同的对象,但这些对象可能会根据输入的不同而有所不同。我创建了下一个pojo: 在我的输入Pojo中: 导入java。util。列表 我将资源添加为对象列表,但我可以看到它是一个对象,其中包含不同的对象。如何将这些不同的对象映射到Java中的对象?事实上,我需要计算我有多少资源,但我正在努力实现这一目标。谢谢!
我使用http://jsonlint.com来验证JSON是否有效。因此,我要么需要更改JSON或代码,要么可能两者都需要。有什么想法吗?
您好,我不熟悉JSON学习,并尝试将上述JSON解析为POJO对象。”https://api.apis.guru/v2/list.json“。我无法理解如何存储不同的主机名”1 Forge。com”,“1密码。local:connect“作为java类中的一个字段。上面的任何帮助都会对我很有帮助
问题内容: 我不清楚杰克逊如何处理映射字段中的大写字母。如果有人可以帮忙,我将不胜感激。 上面是我的json,下面是我的例外… 上面是我的例外,下面是我的课… …等等 问题答案: 由于您的设置方法命名为Jackson,因此假设变量的命名是基于Java的 命名约定 (变量应以小写字母开头)。 如果您真的想要一个大写字母,请使用 setter 上的 @JsonProperty 注释(或-进行序列化-在
我不清楚jackson是如何处理映射字段中的大写字母的。如果有人能帮忙,我将不胜感激。 上面是我的json,下面是我的例外。。。 上面是我的例外,下面是我的班级。。。 ... 等等