#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 просто не распознает его