[英]Jackson Json parse error
嗨,我正在处理一些旧代码,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
}
}
}
}
因此,我们使用的是我刚接触的fasterxml.jackson,在尝试了几种不同的方法后,我不断收到错误消息
com.fasterxml.jackson.databind.JsonMappingException:无法从[来源:java.io.InputStreamReader@6b8b2b1; START_OBJECT令牌中反序列化double的实例。 第42行,第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;
}
当前的现有值文件具有两个哈希图,用于保存“个人”和“业务”的值,并且没有显式绑定,可以采用该模型并将其存储在相应的哈希图中。
我将json文件中的JsonProperty字段更改为“ _value”,并尝试更改了值类文件,但是我不断收到映射错误,有人可以帮助我为值类创建正确的模型。 我尝试了每个哈希表,但不确定如何映射它们。
@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;
};
您可以遵循几种不同的方法将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>>() {});
要将响应作为String发送,请使用java pojo中的java属性注解。 示例:@JsonFormat(shape = JsonFormat.Shape.STRING)受保护的Long userId;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.