gpt4 book ai didi

java - 如何使用 Jackson 反序列化动态字段?

转载 作者:行者123 更新时间:2023-11-30 04:07:53 24 4
gpt4 key购买 nike

我有以下 Json:

{
"id": "id1",
"version": "id1",
"license": { "type": "MIT" }
}

也可以采用以下形式:

{
"id": "id1",
"version": "id1",
"license": "MIT"
}

有时可能是:

{
"id": "id1",
"version": "id1",
"licenses": [
{ "type": "MIT", "url: "path/to/mit" },
{ "type": "Apache2", "url: "path/to/apache" }]
}

以上所有内容本质上都是相同的,我正在寻找一种将它们与单个字段组合并使用 Jackson 对其进行反序列化的方法。有什么想法吗?

最佳答案

首先请看这个问题:Jackson deserialization of type with different objects 。您可以将 JSON 反序列化为以下 POJO 类:

class Entity {

private String id;
private String version;
private JsonNode license;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getVersion() {
return version;
}

public void setVersion(String version) {
this.version = version;
}

public JsonNode getLicense() {
return license;
}

public void setLicense(JsonNode license) {
this.license = license;
}

public void setLicenses(JsonNode license) {
this.license = license;
}

public String retrieveLicense() {
if (license.isArray()) {
return license.elements().next().path("type").asText();
} else if (license.isObject()) {
return license.path("type").asText();
} else {
return license.asText();
}
}

@Override
public String toString() {
return "Entity [id=" + id + ", version=" + version + ", license=" + license + "]";
}
}

如果您想从 POJO 类中检索许可证名称,请使用 retrieveLicense 方法。当然,您可以改进此方法的实现。我的示例仅展示了如何实现它。如果您想将 POJO 类与反序列化逻辑解耦,您可以编写自定义反序列化器。

关于java - 如何使用 Jackson 反序列化动态字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20309798/

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