web-dev-qa-db-fra.com

Comment convertir automatiquement la liste des objets en JSONArray avec la bibliothèque Gson en Java?

Disons que j'ai la liste suivante d'objets personnalisés: ArrayList<GroupItem>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,

10
snaggs

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

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);
}
6
Brian Roach

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

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

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