我正在尝试将以下JSON响应转换为Java POJO:
[
1393591550.6117706,
"TYPE",
"TAG",
"Message",
null
]
(The null at the end is supposed to be there.)
我不确定如何用杰克逊(2.0)对此进行反序列化。我对Json不太熟悉所以我不确定要搜索什么。我已经研究了无密钥反序列化,但是有很多类似的搜索术语,我找不到我想要的东西。
我唯一的想法是使用JsonObject的getElements()并手动将其映射到日志对象(这就是这个json),但我想知道是否有更好的方法来做到这一点,比如@JsonElement(0)或者什么的。我的项目设置方式,必须手动迭代无密钥条目将需要一些重大的重做(或重复的代码)。
答案 0 :(得分:3)
如果没有自定义反序列化器,它实际上是可行的,使用类似这样的东西:
@JsonFormat(shape=JsonFormat.Shape.ARRAY)
@JsonPropertyOrder({ "value", "type", "tag", "mesage", "other" })
public class Data {
public double value;
public String type;
public String tag;
public String message;
// not sure what the null is to represent; needs to match to this property
public Object other;
}
然后你可以读取这样的实例:
Data data = mapper.readValue(src, Data.class);
答案 1 :(得分:1)
如何编写自定义序列化器/反序列化 - 使用逻辑来处理NULL?从文档中查看此页面:
答案 2 :(得分:1)
您可以编写自定义反序列化程序,然后将此注释添加到您的类中:
@JsonDeserialize(using = MyCustomDeserializer.class)
在我的一个项目中,我就是这样做的。 JSON Merge Patch是一个数组或一个对象,所以标准的Jackson反序列化对我来说是失败的。解串器的代码是here。
关于序列化,请使您的类实现JsonSerializable
。
这样做的好处是,您可以{de,}使用“vanilla”ObjectMapper
序列化,而无需使用自定义模块等进行配置