J'ai un List<class>
que je voudrais convertir en un objet JSON, puis parcourir les données de l'objet JSON.
Si c'était juste un list<String>
je pourrais faire quelque chose comme:
JSONObject obj = new JSONObject();
List<String> sList = new ArrayList<String>();
sList.add("val1");
sList.add("val2");
obj.put("list", sList);
Ensuite, je pourrais parcourir la liste comme:
JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.size(); ii++
System.out.println(jArray.getString(ii));
Le problème avec l'utilisation de la classe est que je dois avoir accès aux données de chaque élément de classe de mon list<class>
et je ne sais pas comment l'encoder/le parcourir en JSON. Toute aide serait grandement appréciée.
Appelez getJSONObject()
au lieu de getString()
. Cela vous donnera un handle sur l'objet JSON dans le tableau et vous pourrez ensuite obtenir la propriété de l'objet à partir de là.
Par exemple, pour obtenir la propriété "valeur" d'un List<SomeClass>
où SomeClass
a une String getValue()
et une setValue(String value)
:
JSONObject obj = new JSONObject();
List<SomeClass> sList = new ArrayList<SomeClass>();
SomeClass obj1 = new SomeClass();
obj1.setValue("val1");
sList.add(obj1);
SomeClass obj2 = new SomeClass();
obj2.setValue("val2");
sList.add(obj2);
obj.put("list", sList);
JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.length(); ii++)
System.out.println(jArray.getJSONObject(ii).getString("value"));
Supposons que la classe est Données avec deux objets nom et dob qui sont tous deux chaînes .
Initialement, vérifiez si la liste est vide. Ajoutez ensuite les objets de la liste à un JSONArray
JSONArray allDataArray = new JSONArray();
List<Data> sList = new ArrayList<String>();
//if List not empty
if (!(sList.size() ==0)) {
//Loop index size()
for(int index = 0; index < sList.size(); index++) {
JSONObject eachData = new JSONObject();
try {
eachData.put("name", sList.get(index).getName());
eachData.put("dob", sList.get(index).getDob());
} catch (JSONException e) {
e.printStackTrace();
}
allDataArray.put(eachData);
}
} else {
//Do something when sList is empty
}
Enfin, ajoutez le JSONArray à un JSONObject .
JSONObject root = new JSONObject();
try {
root.put("data", allDataArray);
} catch (JSONException e) {
e.printStackTrace();
}
Vous pouvez également obtenir ces données sous forme de String aussi.
String jsonString = root.toString();
Vous pouvez utiliser un sérialiseur/désérialiseur JSON du type flexjson pour effectuer la conversion à votre place.
Voici comment je le fais avec Google Gson. Je ne sais pas s'il existe un moyen plus simple de procéder (avec ou sans bibliothèque externe).
Type collectionType = new TypeToken<List<Class>>() {
} // end new
.getType();
String gsonString =
new Gson().toJson(objList, collectionType);
Juste pour mettre à jour ce fil, voici comment ajouter une liste (sous forme de tableau json) à JSONObject . Plz, remplacez YourClass par votre nom de classe;
List<YourClass> list = new ArrayList<>();
JSONObject jsonObject = new JSONObject();
org.codehaus.jackson.map.ObjectMapper objectMapper = new
org.codehaus.jackson.map.ObjectMapper();
org.codehaus.jackson.JsonNode listNode = objectMapper.valueToTree(list);
org.json.JSONArray request = new org.json.JSONArray(listNode.toString());
jsonObject.put("list", request);