在Retrofit 2.0中如何忽略JSON对象动态响应的键

android json retrofit2 gson

716 观看

3回复

85 作者的声誉

如何忽略使用改造2.0和gson的两个不同用户的响应所缺少的json键。

这是现有用户的json响应。

{ 
   "details" :{
       "userId" : "548sdry5687rtyde346asf",
        "email: "avc@zxc.com",
        "name":{
          "first":"Jhon",
          "last": "Madan",
          "_id":"69874154sdfadg58dfa245"},
          "gender":"male",
          "location":{
              "address":"12547",
              "city":"delhi",
              "state":"Delhi"
          }
     }
}

这是对新用户的回应

{
    "details":{
        "userId":"1258afafg287fae23sf",
        "email": "qwea@gmail.com",
        "name":{
              "first":"Mohan",
              "last":"mehar",
              "_id":"kdg2467edfdfh356thdg"}
         }
}
作者: Sirisha 的来源 发布者: 2017 年 9 月 15 日

回应 3


-1

6564 作者的声誉

如果缺少相应的JSON字段,则GSON会将类字段设置为null。如果您希望能够访问这些字段而不必担心空指针异常,则可以在访问时将空值懒惰地替换为空对象。

public String getGender() {
    if (gender != null) return gender;
    else return gender = "";
}

public Location getLocation () {
    if (location != null) return location;
    else return location = new Location("", "", "");
}
作者: Leo Aso 发布者: 2017 年 9 月 19 日

2

14400 作者的声誉

如果您希望对象不具有该字段但不关心json是否包含:

class A {
    String first;
    //String gender; //good news, Gson doesn't care by default!
}

如果您希望对象具有该字段但不对它反序列化,即使json确实如此:

class B {
    String first;
    transient String gender; //won't serialize or deserialize
}

如果您希望对象具有该字段,但不在乎json是否没有:

class C {
    String first;
    @Nullable String gender;  //but this is default anyway
}

如果正在显示数据,则您担心:

public String getGender() {
    //has a default value ("") so no NPE's
    return gender == null? "" : gender;
}
作者: Temporary 发布者: 2017 年 9 月 19 日

-1

564 作者的声誉

JSONObject类具有一个名为“ has”的方法:

http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

如果此对象具有名称映射,则返回true。映射可以为NULL。

if(jsonObject.has("email"))
{
  returen true
}
else
{
  return false  
}
作者: Geeta Gupta 发布者: 2017 年 9 月 23 日
32x32