2011-06-24 2 views
2

У меня есть что-то вроде следующего JSon строки:Синтаксического объект с переменным типом в gson

 
{"values" : [ 
      { "group":"A" 
      "rating":2 
      }, 
      { 
      "group":"B" 
      "language":"english" 
      } 
     ] 
} 

Как вы можете видеть, «ценность» является массивом, с различным типом объектов. Один тип может содержать строку и целое число, а другой тип содержит строку и другую строку.

Как с этим справиться?

+0

Если я поместил вторую переменную в виде целого числа, она дает ошибку при анализе типа объекта группы «В», хотя я «использую» только объекты типа «группа А» (т. Е. Я использую только первый элемент этого массива). Я полностью уверен, что первый элемент всегда имеет элементы groupA, но я думаю, он должен разбирать все элементы. – Karan

ответ

0

Извините, я не заметил, что вы написали «gson». Я не уверен, что вы можете это сделать, и вот not me saying it.

+0

Очевидно, вы можете: http://code.google.com/p/google-gson/source/browse/trunk/extras/src/main/java/com/google/gson/extras/examples/rawcollections/RawCollectionsExample.java – Karan

+0

Видимо, вы можете. :) Удачи ... – Amadan

+0

RawCollectionsExample не является примером полиморфной десериализации, именно так я бы лучше подошел к этому. –

0

ли некоторые вещи, как следующий

List myStrings = new ArrayList(); 
    myStrings = gson.fromJson(json,myStrings.getClass()); 

    Iterator myIterator = myStrings.iterator(); 
    boolean b; 
    while(myIterator.hasNext()){ 
     Object o =myIterator.next(); 
     b=o instanceof String; 

     System.out.println("...."+b); 
    } 
0

Мой подход, вероятно, будет осуществлять полиморфный решение десериализации.

В настоящее время Gson не имеет простого механизма полиморфной десериализации, кроме реализации пользовательской десериализации. Следующий выпуск выглядит так, что он предоставит встроенное решение.

Предыдущие Вопросы и ответы stackoverflow.com (некоторые с примерами) по этой теме:

Конкретная к первоначальному вопросу , это выглядит как «группа» lement будет использоваться для различения различных типов.

FWIW, Jackson освобожден a built-in solution to this problem много лун назад.

Смежные вопросы