您好我正在研究一些遗留代码,JSON模型的结构发生了一些变化 原始模型
{
"values": {
"business": {
"default": 5.2
},
"personal": {
"charity": 0.728,
"medical": 1.222,
"moving": 1.222
}
}
}
新模型是这样的
{
"_values": {
"business": {
"purpose": {
"default": 5.2
},
"vehicle": {
"automobile": 0.0,
"bicycle": 0.0,
"motorcycle": 0.0
}
},
"personal": {
"purpose": {
"charity": 0.7280000000000001,
"medical": 1.222,
"moving": 1.222
}
}
}
}
所以我们使用的是更快的xml.jackson,我是一个非常新的,经过几次尝试不同的方法后,我不断收到错误信息
com.fasterxml.jackson.databind.JsonMappingException:无法反序列化START_OBJECT令牌的双重实例 at [来源:java.io.InputStreamReader@6b8b2b1; line:42,column:11](通过引用链:> service.api.types.Drive_Json [“_ values”] - > service.api.types.PotentialValues [“business”] - > java.util.HashMap [ “目的”])
我使用以下注释来提取我的Json文件中的映射
@JsonProperty("values")
private values values;
@JsonIgnoreProperties(ignoreUnknown = true)
public class values {
public HashMap<String, Double> purpose;
public HashMap<String, Double> personal;
}
当前现有值文件有两个hashmap来保存“personal”&amp;的值。 “business”并且没有明确的绑定将模型和存储放在相应的hashmap中。
我将json文件中的JsonProperty字段更改为“_value”,并尝试更改值类文件但我不断得到映射错误,任何人都可以帮助我创建值类的正确模型。 我尝试了一个hashmap,但不知道如何映射它们。
@JsonProperty("_values")
private values Values;
@JsonIgnoreProperties(ignoreUnknown = true)
public class values {
public HashMap<String, Double> business_purpose;
public HashMap<String, Double> business_vehicle;
public HashMap<String, Double> personal_purpose;
};
答案 0 :(得分:3)
您可以使用几种不同的方法将JSON解析为Java对象。在下面找到其中两个(但是请注意,还有许多其他人可以考虑):
您应该使用@JsonProperty("_values")
代替@JsonProperty("values")
来匹配新的JSON。所以你的模型类将如下:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Values {
private Map<String, Object> business;
private Map<String, Object> personal;
// Getters and setters omitted
}
public class Data {
@JsonProperty("_values")
private Values values;
// Getters and setters omitted
}
要解析它,您可以使用:
String json = "{\"_values\":{\"business\":{\"purpose\":{\"default\":5.2},\"vehicle\":"
+ "{\"automobile\":0.0,\"bicycle\":0.0,\"motorcycle\":0.0}},\"personal\":"
+ "{\"purpose\":{\"charity\":0.728,\"medical\":1.222,\"moving\":1.222}}}}";
ObjectMapper mapper = new ObjectMapper();
Data data = mapper.readValue(json, Data.class);
或者,您可以将JSON字符串解析为Map<String, Object>
。可以通过以下方式实现:
String json = "{\"_values\":{\"business\":{\"purpose\":{\"default\":5.2},\"vehicle\":"
+ "{\"automobile\":0.0,\"bicycle\":0.0,\"motorcycle\":0.0}},\"personal\":"
+ "{\"purpose\":{\"charity\":0.728,\"medical\":1.222,\"moving\":1.222}}}}";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> values = mapper.readValue(json,
new TypeReference<HashMap<String, Object>>() {});
答案 1 :(得分:-1)
要以String形式发送响应,请在java pojo中的java属性中使用注解。 例如: @JsonFormat(shape = JsonFormat.Shape.STRING) 受保护的Long userId;