2016-04-07 10 views
1

カスタムGsonデシリアライゼーション次のようなJSONスニペットを考える

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

とGSONへの呼び出し:

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

私はArrayListのを含むのLinkedHashMapで適切に解析されたJavaオブジェクトを取得ダブルス。私のプログラムの目的のために、配列と数値のプリミティブなバージョンを含むようにしたいと思います。ですから、好ましくは、ArrayList<Double>ではなくdouble[]を含むマップを取得します。

私はJsonDeserializer<?>インタフェースを介してカスタムのデシリアライズに見てきましたが、成功しArrayLists[] 年代になるとDoublesdoublesとなるように、それを実装していません。

任意のJSONを解析する際に、ArrayListをArrayListと反対に選択し、Doubleを二重にするようにGSONに指示するにはどうすればよいですか?

答えて

1

あなたが代わりにここでMap.class

new TypeToken<LinkedHashMap <String, double[]>>(){}.getType()を使用することができますが、デモです:

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())); 
    } 
} 
関連する問題