Как я могу использовать GSON для синтаксического анализа и размещения в списке объектов?

#java #gson

#java #gson

Вопрос:

У меня есть доменный объект Foo, и я хочу проанализировать некоторые JSON, такие как

 [
    {"prop": "val"},
    {"prop": "val2"},
]
 

Я хочу получить List<Foo> . Что — то вроде этого

 List<Foo> foos = new Gson().fromJson(json, /*what goes here ?*/);
 

Комментарии:

1. Вы все еще используете JDK 1.4? Тип — начиная с JDK 1.5

2. Я даже не помню, что я установил, но это было определенно в течение последнего месяца. Компилятор говорит 1.6

3. Ну, я использовал import java.lang.reflect. Введите; который решает эту проблему. Теперь вторая строка выдает сообщение об ошибке, в котором говорится, что мне нужно добавить SuppressWarnings, которое ничего не делает

4. Это не ошибка, просто предупреждение, игнорируйте его.

Ответ №1:

Вам нужно использовать a TypeToken , чтобы правильно выразить тип. Class в данном случае этого недостаточно из-за взаимодействия с универсальным типом.

 Type listType = new TypeToken<List<Foo>>(){}.getType();
List<Foo> projects = (List<Foo>) gson.fromJson(response, listType);
 

Комментарии:

1. что делать, если проект содержит закрытые поля, и у меня есть методы получения и установки. Будет ли это по-прежнему работать? Выполняет ли gson автоматический поиск методов?

2. то, что вы описали, — это именно то, как вы должны создавать свой класс домена, GSON заботится обо всем с этого момента (получатель и установщик).

3. Я получаю кучу ошибок с этим кодом.. Я не должен импортировать правильные библиотеки. Хочет, чтобы я «Создал метод GetType()». Теперь это исчезло, и это как-то связано с типом

4. убедитесь, что вы используете последний файл jar и ознакомьтесь с API com.google.gson.reflect. TypeToken<T>

5. да, у меня есть последние jars. Я думаю, что ошибка как-то связана с типом. Eclipse просто не распознает его