[英]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.