首页 > 解决方案 > gson在反序列化JSON时如何将JSON键映射到Java类中的字段

问题描述

我正在寻找这个已经有一段时间了,但我仍然不清楚。我有一个如下所示的 JSON 文件:

{
  "Name" : "Foo Bar",
  "Grade" : "Some Grade",
  "Org" : "Some Org"
}

为了反序列化这个 JSON(使用 gson),我创建了一个名为的 Java 类StudentDetails.java,如下所示:

public class StudentDetails
{
    public String name;
    public String grade;
    public String org;
}

现在我对此有几个问题:

  1. StudentDetails.java即使 JSON 文件中的字段以小写开头并且键以大写开头,gson 也会自动将字段映射到相应的键。我一直在寻找,@SerializedName但我的代码甚至没有使用它就可以工作。相反,如果我使用类似@SerializedName("Name)名称字段的内容,则在反序列化后将其分配为 null。我现在很困惑。
  2. 即使没有 getter 和 setter 方法,反序列化也能工作吗?在 jackson 中,您编写 setter 和 getter 方法。
  3. 如果上述情况属实,即使在私有字段的情况下也有效吗?

标签: javajsongsonjson-deserialization

解决方案


  1. 我对此很确定,但我认为大小写仅在第一个字符之后才重要,因为您通常不会以大写字符开头的字段名称。 的,GSON 将自动映射字段。

  2. 的 GSON不需要getter/setter ( https://stackoverflow.com/a/6203975/4622620 )

  3. 的,GSON 可以处理私有字段,因为它使用反射(https://stackoverflow.com/a/28927525/4622620


推荐阅读