繁体   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