Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Convertir Json Array a una matriz Java normal

¿Hay una manera de convertir JSON Array a Java Array normal para la vinculación de datos android ListView?

  • JSONArray respuesta con Volley para Android
  • Código de respuesta inesperado 500 para el método POST
  • Android - La llamada requiere el nivel 9 de API (el min actual es 8): android.os.StrictMode # setThreadPolicy
  • Simple analizar JSON de URL en Android y mostrar en listview
  • XML vs JSON. ¿Cuál es mejor para almacenar un pequeño fragmento de datos?
  • ¿Qué hace realmente google-services.json?
  • ¿Conversión de json string a objeto java?
  • Dibujo de rutas de conducción con waypoints en android (Google Maps, api dirección de Google, json parsing, decodificar google polyline)
  • 10 Solutions collect form web for “Convertir Json Array a una matriz Java normal”

     ArrayList<String> list = new ArrayList<String>(); JSONArray jsonArray = (JSONArray)jsonObject; if (jsonArray != null) { int len = jsonArray.length(); for (int i=0;i<len;i++){ list.add(jsonArray.get(i).toString()); } } 

    Si aún no tiene un objeto JSONArray, llame al

     JSONArray jsonArray = new JSONArray(jsonArrayString); 

    A continuación, simplemente pasar por eso, la construcción de su propia matriz. Este código supone que es una matriz de cadenas, no debería ser difícil de modificar para adaptarse a su estructura de matriz en particular.

     List<String> list = new ArrayList<String>(); for (int i=0; i<jsonArray.length(); i++) { list.add( jsonArray.getString(i) ); } 

    Tal vez es sólo una solución (no muy eficiente), pero podría hacer algo como esto:

    String[] resultingArray = yourJSONarray.join(",").split(",");

    Obviamente puedes cambiar el separador ' , ' con cualquier cosa que te guste (tuve un JSONArray de direcciones de correo electrónico)

    En lugar de usar la biblioteca org.json , intente usar Jackson o GSON, donde se trata de un solo forro. Con Jackson, f.ex:

     List<String> list = new ObjectMapper().readValue(json, List.class); // Or for array: String[] array = mapper.readValue(json, String[].class); 

    Use puede utilizar una String[] lugar de una ArrayList<String> :

    Se reducirá la sobrecarga de memoria que un ArrayList tiene

    ¡Espero eso ayude!

     String[] stringsArray = new String[jsonArray.length()]; for (int i = 0; i < jsonArray.length; i++) { parametersArray[i] = parametersJSONArray.getString(i); } 

    Sé que la pregunta es acerca de JSONArray, pero aquí es el ejemplo que he encontrado útil donde usted no necesita utilizar JSONArray para extraer objetos de JSONObject.

     import org.json.simple.JSONObject; import org.json.simple.JSONValue; String jsonStr = "{\"types\":[1, 2]}"; JSONObject json = (JSONObject) JSONValue.parse(jsonStr); List<Long> list = (List<Long>) json.get("types"); if (list != null) { for (Long s : list) { System.out.println(s); } } 

    Funciona también con una matriz de cadenas

    Aquí está una mejor manera de hacerlo: si usted está recibiendo los datos de la API. Entonces PARSE el JSON y cargarlo en su listview:

     protected void onPostExecute(String result) { Log.v(TAG + " result); if (!result.equals("")) { // Set up variables for API Call ArrayList<String> list = new ArrayList<String>(); try { JSONArray jsonArray = new JSONArray(result); for (int i = 0; i < jsonArray.length(); i++) { list.add(jsonArray.get(i).toString()); }//end for } catch (JSONException e) { Log.e(TAG, "onPostExecute > Try > JSONException => " + e); e.printStackTrace(); } adapter = new ArrayAdapter<String>(ListViewData.this, android.R.layout.simple_list_item_1, android.R.id.text1, list); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // ListView Clicked item index int itemPosition = position; // ListView Clicked item value String itemValue = (String) listView.getItemAtPosition(position); // Show Alert Toast.makeText( ListViewData.this, "Position :" + itemPosition + " ListItem : " + itemValue, Toast.LENGTH_LONG).show(); } }); adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged(); ... 

    Empezamos desde la conversión [JSONArray -> List <JSONObject>]

     public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array) throws JSONException { ArrayList<JSONObject> jsonObjects = new ArrayList<>(); for (int i = 0; i < (array != null ? array.length() : 0); jsonObjects.add(array.getJSONObject(i++)) ); return jsonObjects; } 

    Siguiente crear una versión genérica reemplazando array.getJSONObject (i ++) con POJO

    Ejemplo:

     public <T> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array) throws JSONException { ArrayList<Tt> tObjects = new ArrayList<>(); for (int i = 0; i < (array != null ? array.length() : 0); tObjects.add( (T) createT(forClass, array.getJSONObject(i++))) ); return tObjects; } private static T createT(Class<T> forCLass, JSONObject jObject) { // instantiate via reflection / use constructor or whatsoever T tObject = forClass.newInstance(); // if not using constuctor args fill up // // return new pojo filled object return tObject; } 

    Puede utilizar una String[] lugar de una ArrayList<String> :

    ¡Espero eso ayude!

      private String[] getStringArray(JSONArray jsonArray) throws JSONException { if (jsonArray != null) { String[] stringsArray = new String[jsonArray.length()]; for (int i = 0; i < jsonArray.length(); i++) { stringsArray[i] = jsonArray.getString(i); } return stringsArray; } else return null; } 

    ¿Qué hay sobre el uso de java.util.Arrays?

     List<String> list = Arrays.asList((String[])jsonArray.toArray()) 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.