Tengo un JsonObject
nombre "mapping"
con el siguiente contenido:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Sé que puedo obtener la matriz "servers"
con:
mapping.get("servers").getAsJsonArray()
Y ahora quiero analizar eso JsonArray
en unjava.util.List
...
¿Cuál es la forma más sencilla de hacer esto?
Gson
.JsonArray
implementosIterable
. Es solo que también estoy encontrando nuevas formas además de agregar una nueva biblioteca.Respuestas:
Definitivamente, la forma más fácil de hacerlo es utilizando la función de análisis predeterminada de Gson
fromJson()
.Existe una implementación de esta función adecuada para cuando necesita deserializar en cualquier
ParameterizedType
(por ejemplo, cualquieraList
), que esfromJson(JsonElement json, Type typeOfT)
.En su caso, solo necesita obtener el valor
Type
de aList<String>
y luego analizar la matriz JSON en esoType
, así:En su caso
yourJson
es aJsonElement
, pero también podría ser aString
, anyReader
o aJsonReader
.Es posible que desee echar un vistazo a la documentación de la API de Gson .
fuente
Type
se puede encontrar en qué paquete?Type
es una interfaz incorporada de Java ubicada en el paquetejava.lang.reflect
getString()
lugar deget()
o de lo contrario me.fromJson()
estaba quejando.El siguiente código está usando
com.google.gson.JsonArray
. Imprimí el número de elementos en la lista, así como los elementos en la listaSALIDA
fuente
Leí la solución del sitio web oficial de Gson aquí
Y este código para ti:
Mostrar resultado en el monitor:
fuente
new Gson().fromJson()
Pude hacer que el mapeo de la lista funcionara con solo usar
@SerializedName
para todos los campos ... noType
era necesaria ninguna lógica .Al ejecutar el código, en el paso n. ° 4 a continuación , a través del depurador, puedo observar que el
List<ContentImage> mGalleryImages
objeto se completó con los datos JSONHe aquí un ejemplo:
1. El JSON
2. Clase Java con la Lista
3. Clase Java para los elementos de la lista
4. El código Java que procesa JSON
fuente
Dado que comienza con
mapping.get("servers").getAsJsonArray()
, si tiene acceso a GuavaStreams
, puede hacer lo siguiente:Note
StreamSupport
no podrá trabajar en elJsonElement
tipo, por lo que es insuficiente.fuente