我试图将一些 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 解析为 JsonNode
与 ObjectMapper
:
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/