原始数组的自定义 Gson 反序列化

Custom Gson deserialization for primitive arrays

给定以下 Json 片段:

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

以及对 GSON 的调用:

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

我得到一个正确解析的 Java 对象,它是一个包含双精度数组列表的 LinkedHashMap。出于我的程序的目的,我希望结果包含数组和数字的原始版本。因此,我最好得到一个包含 double[] 而不是 ArrayList<Double> 的地图。

我已经通过 JsonDeserializer<?> 接口研究了自定义反序列化,但没有成功实现 ArrayLists 成为 [] 的并且 Doubles 变为 doubles

我必须理解什么才能告诉 GSON 在解析任意值时选择 Array 而不是 ArrayList 和 double 而不是 Double JSON?

您可以使用 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()));
    }
}