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);