gpt4 book ai didi

java - 如何使用 jackson objectmapper 反序列化

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:22 24 4
gpt4 key购买 nike

我想将 json(如下所示)转换为 java 对象。我已经为 json 对象创建了 java 类,目前没有使用任何 jackson 注释。

import com.fasterxml.jackson.databind.ObjectMapper;

public class TestJunkie {

private static final ObjectMapper objectMapper = new ObjectMapper();

public static void main(String[] args) throws Exception {
String json = "{\r\n" +
" \"Info\":{\r\n" +
" \"prop1\": \"value1\",\r\n" +
" \"prop2\": \"value2\",\r\n" +
" \"prop3\": \"value3\"\r\n" +
" },\r\n" +
" \"Data\":{\r\n" +
" \"prop1\": \"value1\",\r\n" +
" \"prop2\": \"value2\"\r\n" +
" }\r\n" +
"}";

Pack pack = objectMapper.readValue(json, Pack.class);
System.out.println(pack);
}

}

我将上面的 Json 对象转换为下面名为“Pack”的 Java 类:

import org.apache.commons.lang3.builder.ToStringBuilder;

public class Pack {

private Info info;
private Data data;

public Info getInfo() {
return info;
}

public void setInfo(Info info) {
this.info = info;
}

public Data getData() {
return data;
}

public void setData(Data data) {
this.data = data;
}

@Override
public String toString() {
return new ToStringBuilder(this).append("info", info).append("data", data).toString();
}

}

我故意省略了 Info 和 Data 类。它们的变量、getter、setter 与 json 匹配。如果您愿意,我可以将它们包括在内。

我收到以下异常。为什么会出现此异常以及如何修复它?

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Info" (class com.tester.Jacksons.Pack), not marked as ignorable (2 known properties: "data", "info"])
at [Source: (String)"{
"Info":{
"prop1": "value1",
"prop2": "value2",
"prop3": "value3"
},
"Data":{
"prop1": "value1",
"prop2": "value2"
}
}"; line: 2, column: 10] (through reference chain: com.tester.Jacksons.Pack["Info"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:60)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:822)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1152)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1582)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1560)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2992)
at com.tester.Jacksons.TestJunkie.main(TestJunkie.java:22)

最佳答案

你的对象的键是小写的,在 json 中它们是大驼峰式的。如果这个命名方案是一致的,您可以在对象映射器上设置命名策略。

mapper.setPropertyNamingStrategy(PropertyNamingStrategy.UpperCamelCaseStrategy);

关于java - 如何使用 jackson objectmapper 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166795/

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