Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jackson 2将JSON反序列化为Java_Java_Json_Jackson - Fatal编程技术网

使用Jackson 2将JSON反序列化为Java

使用Jackson 2将JSON反序列化为Java,java,json,jackson,Java,Json,Jackson,我有一个JSON: {"evaluationPart": { "generatedId": "48D5181DB8704F8AB5FC998964AD9075", "evaluationQuestionPartOption": { "generatedId": "48D5181DB8704F8AB5FC998964AD9075" } }} 我为它创建了java类来表示它: 根类: @JsonIgnoreProperties(value = {"evalu

我有一个JSON:

{"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")