Разбор объекта с типом переменной в gson - PullRequest
2 голосов
/ 24 июня 2011

У меня есть что-то вроде следующей строки json:

</p> <pre> {"values" : [ { "group":"A" "rating":2 }, { "group":"B" "language":"english" } ] } </pre> <p>

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

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

Ответы [ 3 ]

0 голосов
/ 24 июня 2011

Сделайте что-то вроде следующего

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 голосов
/ 24 июня 2011

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

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

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

Специфично для исходного вопроса, похоже, что элемент «группа» будет использоваться для различения разных типов.

FWIW, Джексон выпустил встроенное решение этой проблемы много лун назад.

0 голосов
/ 24 июня 2011

Извините, я изначально не заметил, что вы написали "gson". Я не уверен, что вы можете сделать это, и вот не я говорю это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...