在其中一个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;
}
}
杰克逊是否提供任何注释来处理这些?
答案 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,请执行以下操作:
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。