Jackson json反序列化以整数(原始数据)作为POJO的关键

时间:2016-09-13 09:36:48

标签: java rest jackson json-deserialization

在其中一个API中,我收到这个作为Json响应: 您可以在Sample Json resopnse

查看此回复示例
{
    "histogram" : {
        "1" : "12",
        "2" : "20",
        "3" : "50",
        "4" : "90",
        "5" : "10"
     }
}

为了反序列化此响应,如何编写POJO类?

在java中,由于我们不允许将数字作为变量名称,如何将其转换为POJO?

例如,我该如何创建这样的东西:

public class MyPOJO {
    Histogram histogram;

    public static class Histogram {
        // I KNOW THIS IS WRONG !!
        String 1;
        String 2;
        String 3;
        String 4;
    }
}

杰克逊是否提供任何注释来处理这些?

2 个答案:

答案 0 :(得分:1)

对于这个JSON:

{
  "histogram": {
    "1": "12",
    "2": "20",
    "3": "50",
    "4": "90",
    "5": "10"
  }
}

您可以考虑以下方法之一:

使用Map<String, String>保存值

histogram可以解析为Map<String, String>

public class HistogramWrapper {

    @JsonProperty("histogram")
    private Map<String, String> histogram;

    // Getters and setters omitted
}

使用注释为@JsonProperty

的属性

或者,您可以定义Histogram类并使用@JsonProperty注释其属性:

public class HistogramWrapper {

    @JsonProperty("histogram")
    private Histogram histogram;

    // Getters and setters omitted
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Histogram {

    @JsonProperty("1")
    private String _1;

    @JsonProperty("2")
    private String _2;

    @JsonProperty("3")
    private String _3;

    @JsonProperty("4")
    private String _4;

    @JsonProperty("5")
    private String _5;

    // Getters and setters omitted
}

解析JSON

要解析JSON,请执行以下操作:

ObjectMapper mapper = new ObjectMapper();
String json = "{\"histogram\":{\"1\":\"12\",\"2\":\"20\","
            + "\"3\":\"50\",\"4\":\"90\",\"5\":\"10\"}}";

HistogramWrapper wrapper = mapper.readValue(json, HistogramWrapper.class);

答案 1 :(得分:0)

只是对Cassio的回答的补充,如果你有像这样的Json响应

{
        "1": 12, 
        "3": 50, 
        "2": 20, 
        "5": 10, 
        "4": 90, 
        "7": 20, 
        "6": 322
}

您可以直接将它们来回序列化和反序列化为HashMap。不需要POJO。

    String jsonString = "{\"1\":\"12\",\"2\":\"20\","
                + "\"3\":\"50\",\"4\":\"90\",\"5\":\"10\"}";

    HashMap<String, Integer> histogramMap;

    histogramMap = (new ObjectMapper()).
    readValue(jsonString, new TypeReference<HashMap<Integer, String>>(){});

这将直接将其保存为HashMap。