2016-04-07 15 views
1

考慮用下列JSON片段:定製GSON反序列化的基本數組

String json = "{ \"test\" : [1, 2.5, 4, 5.66] }"; 

,並調用GSON:

Map obj = gson.fromJson(array, Map.class); 

我得到一個正確解析Java對象包含一個ArrayList LinkedHashMap中雙打。爲了我的程序的目的,我希望結果包含數組和數字的原始版本。所以最好,我會得到一個包含double[]而不是ArrayList<Double>的地圖。

我已經通過了JsonDeserializer<?>接口看着定製反序列化,但沒有成功實現了它,使得ArrayLists成爲[] 的和Doubles成爲doubles

當我解析任意的JSON時,能夠告訴GSON選擇與ArrayList相對的數組並且Double與Double相反?

回答

1

您可以使用new TypeToken<LinkedHashMap <String, double[]>>(){}.getType()代替Map.class

這裏是演示:

public static void main(String[] args) throws IOException, JSONException { 
    String array = "{ \"test\" : [1, 2.5, 4, 5.66] }"; 

    Gson gson = new Gson(); 

    LinkedHashMap <String, double[]> obj 
     = gson.fromJson(array, new TypeToken<LinkedHashMap<String, double[]>>(){}.getType()); 

    for (Map.Entry<String, double[]> entry : obj.entrySet()) { 
     System.out.println("Key = " + entry.getKey() + 
          ", Value = " + Arrays.toString(entry.getValue())); 
    } 
}