Convertir une masortingce Json en une masortingce Java normale

Existe-t-il un moyen de convertir JSON Array en Java Array normal pour la liaison de données Android ListView?

 ArrayList list = new ArrayList(); JSONArray jsonArray = (JSONArray)jsonObject; if (jsonArray != null) { int len = jsonArray.length(); for (int i=0;i 

Si vous ne possédez pas déjà un object JSONArray, appelez

 JSONArray jsonArray = new JSONArray(jsonArraySsortingng); 

Ensuite, faites simplement une boucle pour créer votre propre tableau. Ce code suppose qu’il s’agit d’un tableau de chaînes, il ne devrait pas être difficile à modifier pour s’adapter à la structure de votre tableau.

 List list = new ArrayList(); for (int i=0; i 

Peut-être que ce n’est qu’une solution de contournement (pas très efficace) mais vous pourriez faire quelque chose comme ceci:

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

Evidemment, vous pouvez changer le séparateur ‘ , ‘ avec tout ce que vous voulez (j’avais un JSONArray d’adresses email)

Au lieu d’utiliser la bibliothèque org.json intégrée, essayez d’utiliser Jackson ou GSON, où il s’agit d’une ligne simple. Avec Jackson, par exemple:

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

Utilisez peut utiliser un Ssortingng[] au lieu d’un ArrayList :

Cela réduira la surcharge de mémoire qu’ArrayList a

J’espère que cela aide!

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

Je sais que cette question concerne JSONArray, mais voici un exemple que j’ai trouvé utile lorsque vous n’avez pas besoin d’utiliser JSONArray pour extraire des objects de JSONObject.

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

Fonctionne également avec un tableau de chaînes

Voici une meilleure façon de le faire: si vous obtenez les données de l’API. Ensuite, PARSEZ le JSON et chargez-le sur votre listview:

 protected void onPostExecute(Ssortingng result) { Log.v(TAG + " result); if (!result.equals("")) { // Set up variables for API Call ArrayList list = new ArrayList(); 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(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 Ssortingng itemValue = (Ssortingng) listView.getItemAtPosition(position); // Show Alert Toast.makeText( ListViewData.this, "Position :" + itemPosition + " ListItem : " + itemValue, Toast.LENGTH_LONG).show(); } }); adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged(); ... 

nous commençons à convertir [JSONArray -> List ]

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

créer ensuite une version générique en remplaçant array.getJSONObject (i ++) par POJO

Exemple :

 public  static List getJSONObjectListFromJSONArray(Class forClass, JSONArray array) throws JSONException { ArrayList 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 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; } 

Vous pouvez utiliser un Ssortingng[] au lieu d’un ArrayList :

J’espère que cela aide!

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

Que diriez-vous d’utiliser java.util.Arrays?

 List list = Arrays.asList((Ssortingng[])jsonArray.toArray())