使用Jackson 2将JSON反序列化为Java
我有一个JSON:使用Jackson 2将JSON反序列化为Java,java,json,jackson,Java,Json,Jackson,我有一个JSON: {"evaluationPart": { "generatedId": "48D5181DB8704F8AB5FC998964AD9075", "evaluationQuestionPartOption": { "generatedId": "48D5181DB8704F8AB5FC998964AD9075" } }} 我为它创建了java类来表示它: 根类: @JsonIgnoreProperties(value = {"evalu
{"evaluationPart": {
"generatedId": "48D5181DB8704F8AB5FC998964AD9075",
"evaluationQuestionPartOption": {
"generatedId": "48D5181DB8704F8AB5FC998964AD9075"
}
}}
我为它创建了java类来表示它:
根类:
@JsonIgnoreProperties(value = {"evaluationPart"})
public class JsonEvaluationPart {
@JsonProperty("generatedId")
private String generatedId;
@JsonProperty("evaluationQuestionPartOption")
private JsonQuestionOption questionOption;
public String getGeneratedId() {
return generatedId;
}
public void setGeneratedId(String generatedId) {
this.generatedId = generatedId;
}
public JsonQuestionOption getQuestionOption() {
return questionOption;
}
public void setQuestionOption(JsonQuestionOption questionOption) {
this.questionOption = questionOption;
}
}
以及JsonQuestionOption
类:
public class JsonQuestionOption {
@JsonProperty("generatedId")
private String generatedId;
public String getGeneratedId() {
return generatedId;
}
public void setGeneratedId(String generatedId) {
this.generatedId = generatedId;
}
}
我编写了一个小型JUnit测试来检查它的运行情况:
public class JsonReaderTest {
/**
* Logger for this class.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(JsonReaderTest.class);
private ObjectMapper objectMapper;
private static final String JSON = "{\"evaluationPart\": {\n" +
" \"generatedId\": \"48D5181DB8704F8AB5FC998964AD9075\",\n" +
" \"evaluationQuestionPartOption\": {\n" +
" \"generatedId\": \"48D5181DB8704F8AB5FC998964AD9075\"\n" +
" }\n" +
"}}";
@Before
public void setUp()
throws Exception {
LOGGER.debug("Creating the object mapper.");
objectMapper = new ObjectMapper();
LOGGER.debug("Object mapper successfully created. {}", objectMapper);
}
@Test
public void testJsonReader()
throws Exception {
JsonEvaluationPart partType = objectMapper.readValue(JSON, JsonEvaluationPart.class);
assertNotNull(partType);
LOGGER.debug("Part: {}.", partType);
assertEquals(partType.getGeneratedId(), "48D5181DB8704F8AB5FC998964AD9075");
assertEquals(partType.getQuestionOption().getGeneratedId(), "48D5181DB8704F8AB5FC998964AD9075");
}
}
问题是,当我像这样阅读JSON时:
JsonEvaluationPart partType = objectMapper.readValue(JSON, JsonEvaluationPart.class);
partType
中的所有属性都是null
。我在这里做错了什么以及如何解决这个问题?您的Json头是错误的。
使用
而不是
@JsonIgnoreProperties(value = {"evaluationPart"})
根据文件规定,这意味着: 只需尝试更换:
@JsonIgnoreProperties(value = {"evaluationPart"})
与:
然后我得到了这个异常:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized字段“evaluationPart”(class com.company.core.json.JsonEvaluationPart),未标记为可忽略(2个已知属性:,“generatedId”,“evaluationQuestionPartOption”)
您知道是什么原因导致此异常吗?您的Json不是标准的。使用“{\n”+“\“generatedId\”:\“48D5181DB8704F8AB5FC998964AD9075\”,\n“+”\“evaluationQuestionPartOption\”:{\n”+“\“generatedId\”:\“48D5181DB8704F8AB5FC998964AD9075\”\n“+”}\n”+“}\n”+“}”如果我更改它,我会得到这个异常:然后我会得到这个异常:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized字段“evaluationPart”(class com.company.core.json.JsonEvaluationPart),未标记为可忽略(2个已知属性:,“generatedId”,“evaluationQuestionPartOption”)
这是因为JSON/model。只需创建一个类,如公共类jsoneevaluationpartwrapper{private jsoneevaluationpart jep;}
:这就是JSON实际对应的!
Annotation that can be used to either suppress serialization of properties
(during serialization), or ignore processing of JSON properties read (during
deserialization).
@JsonIgnoreProperties(value = {"evaluationPart"})
@JsonTypeName("evaluationPart")