2013-10-25 93 views
1

我正在使用Gson庫來解析JSON對象。特別是,我有這樣的JSON:Gson:解析字符串[]

{ 
"key": ["string1", "string2"] 
} 

我想解析它在一個簡單的String [],而不建立一個特定的對象。我想是這樣的:

gson.fromJson(json, String[].class); 

,但我有一個錯誤:「預期BEGIN_OBJECT但BEGIN_ARRAY」,我猜是因爲鑰匙的存在。任何想法我應該如何解決它?

回答

1

創建一個具有key屬性的類,該類的類型爲String[]並反序列化爲該類。

public class Thing 
{ 
    private String[] key; 

    public String[] getKey() { 
     return key; 
    } 
} 

Thing thing = gson.fromJson(json, Thing.class); 
+0

我想過這個,但我試圖避免創建一個新的類,因爲我只需要一個簡單的String []。可能嗎? – Heisenberg

+0

@Heisenberg你可以在進行反序列化之前修改json字符串,但實際上我認爲你應該將數據反序列化爲它所代表的類型。如果這個類真的困擾你,那麼可以在'gson'周圍創建一個包裝器,反序列化爲一個內部類,然後返回包含在其中的'String []'。 – tvanfosson

+0

不,創建一個新班級不是一個大問題,但我想知道是否有更直接的方法來做到這一點。如果沒有更聰明的解決方案,我將創建該類... – Heisenberg

1

由於tvanfosson答案是完美的,我不應該添加任何東西,但在評論你問是不是有可能避免創建Thing類。是的,但我認爲它更脆弱。我要告訴你如何做這個代碼:

String json = "{\"key\": [\"string1\", \"string2\"]}"; 
    String mJson = json.replace("{\"key\":", "").replace("}",""); 
    String[] strings = new Gson().fromJson(mJson, String[].class); 
    System.out.println(Arrays.asList(strings)); 

當然這個代碼運行沒有錯誤,並避免你額外的課程,但覺得如果裏面有一些回車會發生什麼。 它打破,除非您在替換調用中使用了regexp。在這一點上,我更願意添加一個類,而不是思考正確的正則表達式,並讓Gson完成整個工作。

我將此作爲迴應,而不是作爲註釋,以有足夠的空間來解釋自己,但這個答案不應該被視爲正確的反應,而是由於黑客窮使用。更好地理解Gson的原因。