我正在使用Gson庫來解析JSON對象。特別是,我有這樣的JSON:Gson:解析字符串[]
{
"key": ["string1", "string2"]
}
我想解析它在一個簡單的String [],而不建立一個特定的對象。我想是這樣的:
gson.fromJson(json, String[].class);
,但我有一個錯誤:「預期BEGIN_OBJECT但BEGIN_ARRAY」,我猜是因爲鑰匙的存在。任何想法我應該如何解決它?
我正在使用Gson庫來解析JSON對象。特別是,我有這樣的JSON:Gson:解析字符串[]
{
"key": ["string1", "string2"]
}
我想解析它在一個簡單的String [],而不建立一個特定的對象。我想是這樣的:
gson.fromJson(json, String[].class);
,但我有一個錯誤:「預期BEGIN_OBJECT但BEGIN_ARRAY」,我猜是因爲鑰匙的存在。任何想法我應該如何解決它?
創建一個具有key
屬性的類,該類的類型爲String[]
並反序列化爲該類。
public class Thing
{
private String[] key;
public String[] getKey() {
return key;
}
}
Thing thing = gson.fromJson(json, Thing.class);
由於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的原因。
我想過這個,但我試圖避免創建一個新的類,因爲我只需要一個簡單的String []。可能嗎? – Heisenberg
@Heisenberg你可以在進行反序列化之前修改json字符串,但實際上我認爲你應該將數據反序列化爲它所代表的類型。如果這個類真的困擾你,那麼可以在'gson'周圍創建一個包裝器,反序列化爲一個內部類,然後返回包含在其中的'String []'。 – tvanfosson
不,創建一個新班級不是一個大問題,但我想知道是否有更直接的方法來做到這一點。如果沒有更聰明的解決方案,我將創建該類... – Heisenberg