2017-09-15 41 views
3

如何忽略使用retrofit 2.0和gson對兩個不同用戶的響應缺少的json鍵。如何忽略改進2.0中的json對象的動態響應的按鍵

這是現有用戶的json響應。

{ 
    "details" :{ 
     "userId" : "548sdry5687rtyde346asf", 
     "email: "[email protected]", 
     "name":{ 
      "first":"Jhon", 
      "last": "Madan", 
      "_id":"69874154sdfadg58dfa245"}, 
      "gender":"male", 
      "location":{ 
       "address":"12547", 
       "city":"delhi", 
       "state":"Delhi" 
      } 
    } 
} 

這是新用戶的響應

{ 
    "details":{ 
     "userId":"1258afafg287fae23sf", 
     "email": "[email protected]", 
     "name":{ 
       "first":"Mohan", 
       "last":"mehar", 
       "_id":"kdg2467edfdfh356thdg"} 
     } 
} 
+0

你是什麼意思忽略?如果鍵不存在,通常json庫不會崩潰。這些字段將是空的... – Fred

+0

嗨弗雷德,忽略在這個意義上的字段,檢查出新的用戶響應,那裏我們沒有「位置」對象。爲了設置用戶配置文件的視圖,我們需要從各自的pojo類訪問字符串。在這種情況下,當我嘗試註冊一個新用戶時,它只包含名稱和電子郵件,它在位置引發空指針異常,因爲位置對象不存在新用戶。 – SirishaReddy

+1

好吧,但這不是改造或gson的問題。你必須在你的代碼帳戶,因爲它可以爲空,而不是顯示它 – Fred

回答

-1

GSON將設置類字段設置爲null如果相應的JSON字段缺失。如果您希望能夠訪問這些字段而不用擔心空指針異常,則可以在訪問時懶惰地用空對象替換空值。

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

public Location getLocation() { 
    if (location != null) return location; 
    else return location = new Location("", "", ""); 
} 
2

如果你想你的對象不要有外地,但不介意的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; 
} 
+0

Hi @Nick Cardoso,謝謝你的回答。但是,您在B類中給出的解決方案使用了短暫的註釋,我之前嘗試過,但它不適合我。請用我的解決方案來幫助我解決問題。 – SirishaReddy

+0

「用優良解決方案解決問題」是什麼意思?我試圖涵蓋所有的情況,因爲你的問題措辭有點不清楚 - 你的問題是轉換'Json - > Java'或者Java - > Json'。你有錯誤嗎? –

+0

對於每個用戶,我已經爲視圖安排了類似的格式,我將字符串設置爲視圖中的文本視圖。所以如果用戶是新的,他只有姓名和電子郵件。但是,在設置視圖時,文本視圖正在詢問尚未添加到新用戶的性別或位置,但這些鍵存在於現有的用戶json響應中。在這種情況下,它正在提出一個NPE,其中文本視圖要求json響應中不存在的字符串。 – SirishaReddy