Uso de Gson para analizar la matriz y el objeto Json sin nombre

Sé que hay muchos JSON con GSON preguntas, pero ninguno de ellos se refieren a mí directamente. Mi JSON tiene un formato diferente.

Tengo un JSON datos que quiero analizar con GSON que se parece a lo siguiente:

[ { "foo":"1", "bar":[ { "_id":"bar1"} ], "too":["mall", "park"] } ] 

Y tengo el modelo Classes:

Clase ItemArray

 public class ItemArray { List<Item> itemArray; //Get set here } 

Clase del artículo

 public class Item { String foo; List<Bar> bar; List<String> too; //Get set here } 

Clase de bar

 public class Bar { String id; //Get set here } 

Aquí está la pregunta. ¿Está el JSON en el formato correcto? Si es así, ¿las clases del modelo están en el formato correcto?

Si no, por favor, empuje en la dirección correcta. ¡Gracias de antemano!

PD. Puedo modificar el formato de datos de JSON si es necesario.

De acuerdo con su json, simplemente debe tener:

 public class ItemArray extends List<Item> { } 

Si desea mantener la clase java y cambiar su json debe ser:

 { itemArray: [ { "foo":"1", "bar":[ { "_id":"bar1"} ], "too":["mall", "park"] } ] } 

Ah, y hay un desajuste con el id y _id para Bar:

 public class Bar { String _id; //Get set here } 

También puede utilizar una anotación para cambiar el nombre del campo durante Json de / serialization.

Y por último pero no menos importante, considere escribir sus valores mejor. No vea ningún dato como cadenas si no lo son, no se procesará mucho en código java para convertir cosas. Por ejemplo :

 "foo" : 1, 

Y vea foo como un miembro de datos int, no una cadena.

Algunas veces recibimos JsonArray [ {..} , {..} ] como una respuesta (sin 'itemArray' nombre como el suyo) En ese caso, puede utilizar el siguiente código

 Type fooType = new TypeToken<ArrayList<Item>>() {}.getType(); List<Item> array = new Gson().fromJson(response, fooType); 

Encontrar más información sobre este documento oficial – Gson Array-Examples

Si tienes un JsonArray como [ {..} , {..} ] puedes hacerlo con Gson:

 Item[] items = gson.fromJson(json, Item[].class); 

Para comprobar si Json es válido utilice esta herramienta http://jsonlint.com/

 Class Bar( private String _id; //create getter/setters { public class Item { String foo; List<Bar> bar; List<String> too; //Get set here } //this is also fine public class ItemList { List<Item> itemArray; //Get set here } 

Has nombrado de la lista de elementos "itemArray", pero en su json no has nombrado la matriz correspondiente de elementos "itemArray". Así que haga itemArray, El problema no está en su json, es válido. El problema está en su representación para Gson, Gson mapa de las claves de json sobre las variables de objeto (es decir, Java POJO) con el mismo nombre. Si el nombre de su lista es Class es

 List<Item> itemArray; 

Entonces el nombre de la matriz json correspondiente también debería ser itemArray, echar un vistazo

 { itemArray: [ { "foo":"1", "bar":[ { "_id":"bar1"} ], "too":["mall", "park"] } ] } 

Por lo que puede convertir json en un objeto como ese

  Reader reader = new InputStreamReader(IOUtils.toInputStream(json_string)); ItemList itemList = json.toObject(reader, ItemList.class); 

Echa un vistazo a la referencia blow para más detalles https://stackoverflow.com/questions/13625206/how-to-parse-the-result-in-java/13625567#13625567

  • Cómo insertar a granel de Json a Sqlite en Android
  • Los parámetros de clase anidados de Gson no tienen valores
  • Cómo crear Json con JsonArray y JsonObject
  • Cómo crear un objeto Json
  • Finalización de la construcción de objetos después de la deserialización de GSON
  • Excepción no manipulada org.json.jsonexception
  • Android - Conexión a la base de datos MySQL
  • Compruebe JSONArray para valor específico
  • Android - ¿Mejor alternativa a la lista expandible?
  • ¿Cómo puedo eliminar la clave nameValuePairs del JSONObject?
  • Cómo publicar el progreso para el análisis de archivos json de gran tamaño con GSON
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.