convertir ArrayList en JSONArray

J’ai un ArrayList que j’utilise dans un ArrayAdapter pour un ListView. Je dois prendre les éléments de la liste et les convertir en JSONArray pour les envoyer à une API. J’ai cherché autour de moi, mais je n’ai rien trouvé qui explique comment cela pourrait fonctionner, toute aide serait appréciée.

MISE À JOUR – SOLUTION

Voici ce que j’ai fini par faire pour résoudre le problème.

Objet dans ArrayList:

public class ListItem { private long _masterId; private Ssortingng _name; private long _category; public ListItem(long masterId, Ssortingng name, long category) { _masterId = masterId; _name = name; _category = category; } public JSONObject getJSONObject() { JSONObject obj = new JSONObject(); try { obj.put("Id", _masterId); obj.put("Name", _name); obj.put("Category", _category); } catch (JSONException e) { trace("DefaultListItem.toSsortingng JSONException: "+e.getMessage()); } return obj; } } 

Voici comment je l’ai converti:

 ArrayList myCustomList = .... // list filled with objects JSONArray jsonArray = new JSONArray(); for (int i=0; i < myCustomList.size(); i++) { jsonArray.put(myCustomList.get(i).getJSONObject()); } 

Et la sortie:

 [{"Name":"Name 1","Id":0,"Category":"category 1"},{"Name":"Name 2","Id":1,"Category":"category 2"},{"Name":"Name 3","Id":2,"Category":"category 3"}] 

J’espère que cela aide quelqu’un un jour!

Si je lis correctement les constructeurs JSONArray, vous pouvez les construire à partir de n’importe quelle collection (arrayList est une sous-classe de Collection) comme ceci:

 ArrayList list = new ArrayList(); list.add("foo"); list.add("baar"); JSONArray jsArray = new JSONArray(list); 

Les références:

Utilisez la bibliothèque Gson pour convertir ArrayList en JsonArray.

 Gson gson = new GsonBuilder().create(); JsonArray myCustomArray = gson.toJsonTree(myCustomList).getAsJsonArray(); 

Alors que quelqu’un org.json.JSONArray que l’OP veut convertir une liste personnalisée en org.json.JSONArray non en com.google.gson.JsonArray , la réponse org.json.JSONArray devrait être la suivante:

 Gson gson = new Gson(); Ssortingng listSsortingng = gson.toJson( targetList, new TypeToken>() {}.getType()); JSONArray jsonArray = new JSONArray(listSsortingng); 
 public void itemListToJsonConvert(ArrayList> list) { JSONObject jResult = new JSONObject();// main object JSONArray jArray = new JSONArray();// /ItemDetail jsonArray for (int i = 0; i < list.size(); i++) { JSONObject jGroup = new JSONObject();// /sub Object try { jGroup.put("ItemMasterID", list.get(i).get("ItemMasterID")); jGroup.put("ID", list.get(i).get("id")); jGroup.put("Name", list.get(i).get("name")); jGroup.put("Category", list.get(i).get("category")); jArray.put(jGroup); // /itemDetail Name is JsonArray Name jResult.put("itemDetail", jArray); return jResult; } catch (JSONException e) { e.printStackTrace(); } } } 

Je sais que son déjà répondu, mais il y a une meilleure solution ici utilise ce code:

 for ( Field f : context.getFields() ) { if ( f.getType() == Ssortingng.class ) || ( f.getType() == Ssortingng.class ) ) { //DO Ssortingng To JSON } /// And so on... } 

De cette façon, vous pouvez accéder aux variables de la classe sans les taper manuellement.

Plus vite et mieux .. J’espère que ça aide.

À votre santé. :RÉ

Ajoutez à votre classement:

 implementation 'com.squareup.retrofit2:converter-gson:2.3.0' 

Convertir ArrayList en JsonArray

 JsonArray jsonElements = (JsonArray) new Gson().toJsonTree(itemsArrayList);