2015-10-05 345 views
2

解析問題我以前在REST API像下面JSON響應,JSON首字母大寫鍵與GSON

例,

{ 「ID」: 「1234」}。

我創建了一個POJO類來設置它,如下所示。

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example { 

    @SerializedName("id") 
    @Expose 
    private String id; 

    /** 
    * 
    * @return 
    * The id 
    */ 
    public String getId() { 
     return id; 
    } 

    /** 
    * 
    * @param id 
    * The id 
    */ 
    public void setId(String id) { 
     this.id = id; 
    } 
} 

而且我與GSON解析像下面

Example response = new Gson().fromJson(jsonResponse, Example .class); 

現在,響應變更爲

{ 「ID」: 「1234」}

而且由於大寫字母的初始化,我的整個解析都返回給我了。

我嘗試了很多事情來解決它,但我無法得到任何解決方案。我只有建議像

  • 你應該初始資本變更@SerializedName的名稱(但我有成千上萬個對象)

是否有GSON不會依賴於資本或更低的情況下,任何解決方案的關鍵?

+0

嘗試把資本ID在@SerializedName(「ID」),而不是@SerializedName(「ID 「) – Nitesh

+0

您可以用'@SerializedName(」Id「)''全局替換所有'@SerializedName(」id「)''。 – mixel

+0

@Nitesh感謝您的建議,但我需要替代做這樣的改變。因爲我有成千上萬的對象SerializedName .. –

回答

2

我認爲你可以在你的GSON Builder中使用FieldNamingPolicy這樣的:

Gson gson = new GsonBuilder() 
       .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) 
       .create(); 

我覺得你的情況,你將需要使用基於您想要使用的分離器LOWER_CASE_WITH_UNDERSCORES或LOWER_CASE_WITH_DASHES。

From the docs如果你設置了這個標誌,它將把駱駝封裝的表單轉換爲小寫字段名。

編輯:
的SerializedName註釋將覆蓋任何字段命名策略,所以你必須要小心它 - >source

+0

我認爲'UPPER_CAMEL_CASE'是更適合他的需求。 – mixel

+0

沒有。在實施您的解決方案後,它無法解決我的UPPER_CAMEL_CASE問題。 –

+0

這就是爲什麼我建議你使用LOWER_CASE_WITH_UNDERSCORES或LOWER_CASE_WITH_DASHES,因爲你想改變「ID」爲「ID」權? –