杰克逊反序列化没有键的json(只有值)

时间:2014-02-28 16:43:45

标签: json jackson

我正在尝试将以下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)或者什么的。我的项目设置方式,必须手动迭代无密钥条目将需要一些重大的重做(或重复的代码)。

3 个答案:

答案 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?从文档中查看此页面:

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

答案 2 :(得分:1)

您可以编写自定义反序列化程序,然后将此注释添加到您的类中:

@JsonDeserialize(using = MyCustomDeserializer.class)

在我的一个项目中,我就是这样做的。 JSON Merge Patch是一个数组或一个对象,所以标准的Jackson反序列化对我来说是失败的。解串器的代码是here

关于序列化,请使您的类实现JsonSerializable

这样做的好处是,您可以{de,}使用“vanilla”ObjectMapper序列化,而无需使用自定义模块等进行配置