gpt4 book ai didi

java - 将 JSON 映射到 Java 对象的正确方法

转载 作者:行者123 更新时间:2023-12-01 17:59:08 26 4
gpt4 key购买 nike

我试图将一些 json 元素映射到 java 对象,但似乎无法找出正确的方法。显然,网上有很多关于如何将 json 映射到 pojos 的示例,但我有一个很大的 JSON 字符串,我只想映射 JSON 字符串中的几个键来构建一个对象...

{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}

}

假设我只想要标题和 GlossEntry:id、SortAs 和 Abbrev,

为什么将其映射到仅包含这些字段的 pojo,而不必将整个 json 映射到对象并获取这些元素,最简单的原因是什么

最佳答案

如果您愿意使用 Jackson ,一个流行的 Java JSON 解析器,这个 answer可能会给你一些见解。这是针对您的问题量身定制的解决方案。

首先定义一个类来保存值:

@JsonIgnoreProperties(ignoreUnknown = true)
public class GlossaryEntry {

@JsonProperty("ID")
private String id;

@JsonProperty("SortAs")
private String sortAs;

@JsonProperty("Abbrev")
private String abbrev;

// Constructor, getters and setters omitted
}

然后将整个 JSON 解析为 JsonNodeObjectMapper :

String json = "{\"glossary\":{\"title\":\"example glossary\",\"GlossDiv\":{\"title\":\"S\",\"GlossList\":{\"GlossEntry\":{\"ID\":\"SGML\",\"SortAs\":\"SGML\",\"GlossTerm\":\"Standard Generalized Markup Language\",\"Acronym\":\"SGML\",\"Abbrev\":\"ISO 8879:1986\",\"GlossDef\":{\"para\":\"A meta-markup language, used to create markup languages such as DocBook.\",\"GlossSeeAlso\":[\"GML\",\"XML\"]},\"GlossSee\":\"markup\"}}}}}";

ObjectMapper mapper = new ObjectMapper();
JsonNode tree = mapper.readTree(json);

使用JSON Pointer查询 GlossEntry 节点并最终使用 ObjectMapper将其解析为 GlossaryEntry 实例:

JsonNode node = tree.at("/glossary/GlossDiv/GlossList/GlossEntry");
GlossaryEntry glossaryEntry = mapper.treeToValue(node, GlossaryEntry.class);

JSON Pointer是一种遍历 JSON 的路径语言。欲了解更多详情,请查看RFC 6901 。从 2.3 版开始,它就可以在 Jackson 中使用。

关于java - 将 JSON 映射到 Java 对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42325369/

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