2016-04-07 2 views
1

Учитывая следующие Json сниппет:Пользовательские Gson десериализации для примитивных массивов

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

и призыв к GSON:

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

я правильно разобранную объект Java, который является LinkedHashMap содержащий ArrayList из парный. Для целей моей программы я хотел бы, чтобы результат содержал примитивные версии массивов и чисел. Поэтому я предпочел бы получить карту, содержащую double[], а не ArrayList<Double>.

Я посмотрел в пользовательские десериализации через интерфейс JsonDeserializer<?>, но не успешно реализовали его таким образом, чтобы ArrayLists стать [] «s и Doubles становится doubles.

Что я должен понимать, чтобы сообщить GSON о выборе Array против ArrayList и двойном сопротивлении Double при анализе произвольного JSON?

ответ

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())); 
    } 
} 
Смежные вопросы