Disons que j'ai la liste suivante d'objets personnalisés: ArrayList<GroupItem>
où GroupItem
est une classe contenant des variables int
et String
.
J'ai essayé jusqu'à présent la bibliothèque Gson
mais ce n'est pas exactement ce que je veux.
ArrayList<GroupItem> groupsList = /* ... */
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(groupsList, new TypeToken<ArrayList<GroupItem>>() {}.getType());
JsonArray jsonArray = element.getAsJsonArray();
Mon objectif est d'obtenir JSONArray
(org.Json.JSONArray) d'une manière ou d'une autre. Des idées?
[MODIFIER]
Mon projet est Android avec Cordova qui a une API basée sur org.Json.JSONArray
Et j'ai pensé à écrire un moyen générique pour convertir les instances en JSONArray
/JSONObject
Merci,
Cette voie est travaillée pour moi:
Convertissez toute la liste en chaîne.
String element = gson.toJson(
groupsList,
new TypeToken<ArrayList<GroupItem>>() {}.getType());
Créez JSONArray
à partir de String:
JSONArray list = new JSONArray(element);
Le org.json
les classes basées sur inclus dans Android n'ont pas de fonctionnalités liées à la conversion Java POJO vers/depuis JSON.).
Si vous avez une liste de certaines classes (List<GroupItem>
) et vous devez absolument le convertir en org.json.JSONArray
vous avez deux choix:
A) Utilisez Gson ou Jackson pour convertir en JSON, puis analysez ce JSON en JSONArray
:
List<GroupItem> list = ...
String json = new Gson().toJson(list);
JSONArray array = new JSONArray(json);
B) Écrivez du code pour créer les JSONArray
et les JSONObject
qu'il contiendra à partir de vos objets Java:
JSONArray array = new JSONArray();
for (GroupItem gi : list)
{
JSONObject obj = new JSONObject();
obj.put("fieldName", gi.fieldName);
obj.put("fieldName2", gi.fieldName2);
array.put(obj);
}
Pourquoi voulez-vous utiliser GSON pour convertir en classe org.json? Vous n'avez pas non plus besoin d'écrire de code personnalisé pour obtenir un JSONArray. org.json api fournit un moyen de le faire.
LinkedList list = new LinkedList();
list.add("foo");
list.add(new Integer(100));
list.add(new Double(1000.21));
list.add(new Boolean(true));
list.add(null);
JSONArray jsonArray = new JSONArray(list);
System.out.print(jsonArray);
Vous n'avez pas besoin de gson. Il y a un constructeur qui prend une collection, donc juste:
ArrayList<GroupItem> groupsList =... ;
JSONArray JSONArray = new JSONArray(groupsList);
Utiliser Jackson for JSON to Object ou Object to JSON
Voir le lien suivant exemples Jackson
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
StringWriter stringWriter = new StringWriter();
objectMapper.writeValue(stringWriter, groupsList );
System.out.println("groupsList JSON is\n"+stringWrite);