gpt4 book ai didi

json - Jackson:是否可以将父对象的属性包含到嵌套对象中?

转载 作者:行者123 更新时间:2023-12-03 20:37:32 24 4
gpt4 key购买 nike

我正在使用 Jackson 来序列化/反序列化 JSON 对象。

我有以下 JSON 用于 Study目的:

{
"studyId": 324,
"patientId": 12,
"patient": {
"name": "John",
"lastName": "Doe"
}
}

更新:不幸的是,无法修改 JSON 结构。这是问题的一部分。

我想将对象反序列化为以下类:

public class Study {
Integer studyId;
Patient patient;
}



public class Patient {
Integer patientId;
String name;
String lastName;
}

是否可以包含 patientId属性(property)在 Patient目的?

我能够反序列化 patient对象进入 Patient类(具有相应的 namelastName 属性),但无法包含 patientId属性(property)。

有任何想法吗?

最佳答案

您可以为您的用例使用自定义解串器。这是它的样子:

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

public class StudyDeserializer extends JsonDeserializer<Study>
{
@Override
public Study deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException
{
JsonNode studyNode = parser.readValueAsTree();

Study study = new Study();
study.setStudyId(studyNode.get("studyId").asInt());

Patient patient = new Patient();
JsonNode patientNode = studyNode.get("patient");
patient.setPatientId(studyNode.get("patientId").asInt());
patient.setName(patientNode.get("name").asText());
patient.setLastName(patientNode.get("lastName").asText());
study.setPatient(patient);

return study;
}
}

Study 中将上述类指定为您的解串器类(class):

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

@JsonDeserialize(using = StudyDeserializer.class)
public class Study
{
Integer studyId;
Patient patient;

// Getters and setters
}

现在,您指定的 JSON 输入应该按预期反序列化。

关于json - Jackson:是否可以将父对象的属性包含到嵌套对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19191223/

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