使用Gson将JSON映射到POJO

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

{ "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()为null。 如何使用Gson将我的JSON映射到POJO? 我的变量的顺序对于Gson映射是否重要?

我的变量的顺序对于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; 

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

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

如果你正在获得jsonforms的第三方,那么不幸的是,你必须改变你的pojo或者你可以使用适配器。