java JacksonMap器如何知道每个Json对象中的哪个字段要分配给类对象?

o75abkj4  于 2023-05-15  发布在  Java
关注(0)|答案(2)|浏览(165)

假设我有一个像这样的Json对象:

{
    "name": "Bob Dole",
    "company": "Bob Dole Industries",
    "phone": {
        "work": "123-456-7890",
        "home": "234-567-8901",
        "mobile": "345-678-9012"
    }
}

为了帮助我阅读它,我使用Jackson的Object Mapper和以下类:

public class Contact {
        public static class Phone {
        private String work;
        private String home;
        private String mobile;

        public String getWork() { return work; }
        public String getHome() { return home; }
        public String getMobile() { return mobile; }

        public void setWork(String s) { work = s; }
        public void setHome(String s) { home = s; }
        public void setMobile(String s) { mobile = s; }
    }

    private String name;
    private String company;
    private Phone phone;

    public String getName() { return name; }
    public String getCompany() { return company; }
    public Phone getPhone() { return phone; }

    public void setName(String s) { name = s; }
    public void setCompany(String s) { company = s; }
    public void setPhone(Phone p) { phone = p; }
}

我的问题是,对象Map器如何(使用最简单的解释)“反序列化”Json对象?我以为它是匹配变量名,但更改几个字母并不影响输出。然后,我尝试切换set()函数的顺序,但没有任何效果。我也试过了,但也没用。我猜这里面有更复杂的东西但到底是什么
我试图查看文档和过去的代码,但没有看到对我有意义的解释。

jchrr9hc

jchrr9hc1#

无注解:

在没有任何注解的情况下,它执行所谓的POJOMap,它只是在示例成员上使用reflection,并使用一些关于如何将JSON中的键Map到示例成员名称的规则。**注意:它适用于private成员以及publicpackage protected *
如果它不匹配示例成员的名称,那么它开始尝试匹配getXXXsetXXX方法,如果它不匹配任何东西,那么它放弃。

带注解:

它使用注解提供的元数据进行Map和转换。
当您有源代码可以添加注解时,显式地使用注解总是更好的,这样就没有什么Map到什么的猜测工作。

  • 记住显式总是比隐式好!*

这些都在WIKI上有很好的记录:

MappingAnnotations

JSON Schema:

我现在正在为我所有的新项目创建JSON Schema定义,以根据模式规则引擎记录哪些是有效的JSON,哪些不是。这是记录数据结构和消除解析错误的好方法。

7ajki6be

7ajki6be2#

我最近做了一个视频,可能有助于阐明JSON解析在Java中如何使用Jackson或Gson反射。在Java应用程序中使用JSON数据时,这种技术可以保存大量的时间和精力。
如果你有兴趣了解更多,我建议你看看我的YouTube视频。我将详细介绍如何通过这些流行的库使用反射来解析JSON数据,并包含一些有用的代码示例,使其更易于理解。
我希望你觉得它有帮助,并随时留下评论或问任何问题,如果你有他们!
YouTube视频:https://youtu.be/dLDXsq8Nr4o Github链接:https://github.com/sriramr98/Java-JSON-Parser

相关问题