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

标签 java json

我试图将一些 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/

相关文章:

java - 如何将Balistica lib(.vala)导入Android Studio

java - ActiveMQ 故障转移 : How to detect when an application starts and cannot find a broker

Python - 将超大 (6.4GB) XML 文件转换为 JSON

java - 当 GUI 不更新信息时,使用多线程 SWING 处理 GUI

java - 更新插入文档时索引未更新

Java:将二进制转换为十六进制时出现 NumberFormatException

java - 无法使用具有构建器模式的 jackson 3+ 实例化 POJO

c# - 组合来自不同 URL 的 2 个 JSON 源

c# - Json对象从YouTube返回重复字段

jquery - 使用 json 将选项标记为在多选中选择