簡體   English   中英

傑克遜·傑森解析錯誤

[英]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對象。 在其中兩個下面查找(但請注意,您可以考慮其他許多選擇):

方法1

您應該使用@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);

方法2

或者,您可以將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM