У меня есть JsonObject
имя "mapping"
со следующим содержанием:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Я знаю, что могу получить массив "servers"
с помощью:
mapping.get("servers").getAsJsonArray()
А теперь я хочу разобрать это JsonArray
на java.util.List
...
Как это сделать проще всего?
Gson
.JsonArray
орудияIterable
. Просто я также нахожу новые способы, помимо добавления новой библиотеки.Ответы:
Определенно, самый простой способ сделать это - использовать функцию синтаксического анализа Gson по умолчанию
fromJson()
.Существует реализация этой функции, подходящая для случаев, когда вам нужно десериализовать в любой
ParameterizedType
(например, любойList
), то естьfromJson(JsonElement json, Type typeOfT)
.В вашем случае вам просто нужно получить
Type
из a,List<String>
а затем проанализировать массив JSON в немType
, например:В вашем случае
yourJson
это aJsonElement
, но это также может быть aString
, anyReader
или aJsonReader
.Вы можете взглянуть на документацию Gson API .
источник
Type
в каком пакете можно найти?Type
- это встроенный интерфейс Java, расположенный в пакетеjava.lang.reflect
getString()
вместо,get()
иначе.fromJson()
жаловался.Ниже используется код
com.google.gson.JsonArray
. Я напечатал количество элементов в списке, а также элементы в спискеВЫВОД
источник
Я прочитал решение с официального сайта Gson здесь
И этот код для вас:
Результат показать на мониторе:
источник
new Gson().fromJson()
Мне удалось получить отображение списка для работы, просто используя
@SerializedName
для всех полей ... никакой логикиType
не требовалось.Запустив код - на шаге 4 ниже - через отладчик, я могу заметить, что
List<ContentImage> mGalleryImages
объект заполнен данными JSONВот пример:
1. JSON
2. Класс Java со списком
3. Класс Java для элементов списка.
4. Код Java, обрабатывающий JSON.
источник
Если вы начинаете с того
mapping.get("servers").getAsJsonArray()
, что у вас есть доступ к GuavaStreams
, вы можете сделать следующий однострочник:Заметка
StreamSupport
не сможет работать сJsonElement
типом, поэтому этого недостаточно.источник