【问题标题】:Mapping JSON into POJO using Gson使用 Gson 将 JSON 映射到 POJO
【发布时间】:2014-11-20 12:21:24
【问题描述】:

我有以下 JSON 来表示盐请求的服务器响应:

{
    "USER":
    {
        "E_MAIL":"email",
        "SALT":"salt"
    },
    "CODE":"010"
}

我尝试用以下 POJO 映射它:

public class SaltPOJO {
    private String code = null;
    private User user = null;

    @Override
    public String toString() {
        return this.user.toString();
    }

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }

    public class User {
        private String e_mail = null;
        private String salt = null;

        @Override
        public String toString() {
            return this.e_mail + ": " + this.salt;
        }
        public String getE_mail() {
            return e_mail;
        }
        public void setE_mail(String e_mail) {
            this.e_mail = e_mail;
        }
        public String getSalt() {
            return salt;
        }
        public void setSalt(String salt) {
            this.salt = salt;
        }
    }
}

现在每次我这样做:

Gson gson = new Gson();
SaltPOJO saltPojo = gson.fromJson(json.toString(), SaltPOJO.class);

Log.v("Bla", saltPojo.toString());

saltPojo.toString() 为空。如何使用 Gson 将我的 JSON 映射到 POJO? 我的变量顺序对 Gson 映射很重要吗?

【问题讨论】:

  • 字段的顺序无关紧要,但是名字是的,你可能应该看看user guide
  • 什么是json? json.toString(), SaltPOJO.class 这里.??
  • JSONObject json 和 SaltPOJO 是我在上面发布的类。

标签: java json gson


【解决方案1】:

我的变量顺序对于 Gson 映射重要吗?

不,事实并非如此。

如何使用 Gson 将我的 JSON 映射到 POJO?

区分大小写,JSON 字符串中的键应与 POJO 类中使用的变量名相同。

你可以使用@SerializedName注解来使用任何你喜欢的变量名。

示例代码:

  class SaltPOJO {
        @SerializedName("CODE")
        private String code = null;
        @SerializedName("USER")
        private User user = null;
        ...

        class User {
            @SerializedName("E_MAIL")
            private String e_mail = null;
            @SerializedName("SALT")
            private String salt = null;

【讨论】:

    【解决方案2】:

    您的 getter 和 setter 之间没有正确的映射。如果您将 json 更改为以下内容,它将起作用:

    {
        "user":
        {
            "email":"email",
            "salt":"salt"
        },
        "code":"010"
    }
    

    如果您从第三方获取 json,那么不幸的是,您将不得不更改您的 pojo,或者您可以使用适配器。

    【讨论】:

    • 所以区分大小写?那将非常糟糕,因为我无法更改 json。 json 是固定的。
    • 是的!所以继续改变pojo :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2019-08-10
    • 2020-09-23
    • 2017-03-31
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多