gpt4 book ai didi

java - Jackson Json 解析错误

转载 作者:行者123 更新时间:2023-12-02 03:23:16 24 4
gpt4 key购买 nike

您好,我正在处理一些遗留代码,并且 JSON 模型的结构发生了一些变化原型(prototype)号

{
"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:无法反序列化 START_OBJECT token 中的 double 实例 在[来源:java.io.InputStreamReader@6b8b2b1;行:42,列:11](通过引用链:>service.api.types.Drive_Json["_values"]->service.api.types.PotentialValues["business"]->java.util.HashMap["Purpose “])

我使用以下注释来提取 Json 文件中的映射

@JsonProperty("values")
private values values;

@JsonIgnoreProperties(ignoreUnknown = true)
public class values {
public HashMap<String, Double> purpose;
public HashMap<String, Double> personal;
}

当前现有的值文件有两个 HashMap 来保存“个人”和“企业”的值,并且没有显式绑定(bind),采用模型并存储在各自的 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;
};

最佳答案

您可以采用几种不同的方法将 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>>() {});

关于java - Jackson Json 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com