2014-12-01 37 views
0

我正在使用com.google.gson和註釋@SerializedName。 使用@SerialiazedName("@foo")時,由於'@'See source code),它拋出IllegalArgumentException。Google Gson在屬性名稱中不允許出現'@'

當使用JSONLint和{ "@foo": 1 }時,結果是有效的JSON對象。

爲什麼Google Gson在這種情況下拋出異常?對於JSON屬性,'@'是無效的字符嗎?

+0

答案在您發佈的代碼中。使用的正則表達式不允許名稱以'@'開頭。 – hfontanez 2014-12-01 23:03:37

+0

JSON對象允許任何JSON字符串作爲成員名稱,因此每個有效的JSON字符串都是允許的,這意味着任何Java字符串 - 即使是空字符串。我不明白爲什麼Gson試圖在這裏驗證它們。 – fge 2014-12-01 23:07:05

回答

1

這是Gson的一個非常舊的版本。我們已經在2.3.1。考慮更新。

下工作正常

public class GsonTest { 
    public static void main(String[] args) throws Exception { 
     System.out.println(new Gson().toJson(new Allowed())); 
    }  
} 

class Allowed { 
    @SerializedName("@val") 
    private String val = "Hey"; 
} 

,並打印

{"@val":"Hey"} 

你使用不支持它的版本,無論出於何種原因。

See here.它被固定在1.7。

相關問題