Eu tenho um JsonObject
nome "mapping"
com o seguinte conteúdo:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Eu sei que posso obter o array "servers"
com:
mapping.get("servers").getAsJsonArray()
E agora eu quero analisar isso JsonArray
em um java.util.List
...
Qual é a maneira mais fácil de fazer isso?
Gson
.JsonArray
implementosIterable
. É que também estou encontrando novas maneiras além de adicionar uma nova biblioteca.Respostas:
Definitivamente, a maneira mais fácil de fazer isso é usando a função de análise padrão do Gson
fromJson()
.Há uma implementação dessa função adequada para quando você precisa desserializar em qualquer
ParameterizedType
(por exemplo, qualquerList
), que éfromJson(JsonElement json, Type typeOfT)
.No seu caso, você só precisa obter o
Type
de aList<String>
e, em seguida, analisar a matriz JSON nissoType
, assim:No seu caso
yourJson
é aJsonElement
, mas também pode ser aString
, anyReader
ou aJsonReader
.Você pode querer dar uma olhada na documentação da API Gson .
fonte
Type
pode ser encontrado em qual pacote?Type
é uma interface integrada Java localizada no pacotejava.lang.reflect
getString()
vez deget()
ou então.fromJson()
estava reclamando.O código abaixo está usando
com.google.gson.JsonArray
. Eu imprimi o número do elemento na lista, bem como os elementos na listaRESULTADO
fonte
Eu li a solução do site oficial da Gson aqui
E este código para você:
Resultado mostrado no monitor:
fonte
new Gson().fromJson()
Consegui fazer o mapeamento de lista funcionar usando apenas
@SerializedName
para todos os campos ... nenhuma lógica ao redorType
foi necessária.Executando o código - na etapa 4 abaixo - por meio do depurador, posso observar que o
List<ContentImage> mGalleryImages
objeto foi preenchido com os dados JSONAqui está um exemplo:
1. O JSON
2. Classe Java com a lista
3. Classe Java para os itens da lista
4. O código Java que processa o JSON
fonte
mapping.get("servers").getAsJsonArray()
Desde que você comece com , se você tiver acesso ao GuavaStreams
, você pode fazer o seguinte:O Note
StreamSupport
não será capaz de trabalhar noJsonElement
tipo, por isso é insuficiente.fonte