J'ai converti un ArrayList à un JSONArray. Comment puis-je le reconvertir?
Le résultat final doit être une ArrayList. Merci d'avance.
MODIFIER:
Voici comment je convertis le ArrayList en JSONArray:
String string_object= new Gson().toJson(MyArrayList<OBJECT>);
JSONArray myjsonarray = new JSONArray(string_object);
Vous pouvez convertir votre chaîne JsonArray ou json en ArrayList<OBJECT>
en utilisant la bibliothèque Gson comme ci-dessous.
ArrayList<OBJECT> yourArray = new Gson().fromJson(jsonString, new TypeToken<List<OBJECT>>(){}.getType());
//or
ArrayList<OBJECT> yourArray = new Gson().fromJson(myjsonarray.toString(), new TypeToken<List<OBJECT>>(){}.getType());
De même, lors de la conversion de votre ArrayList<OBJECT>
en JsonArray, nul besoin de la convertir en chaîne, puis de nouveau en JsonArray
JsonArray myjsonarray = new Gson().toJsonTree(MyArrayList<OBJECT>).getAsJsonArray();
Reportez-vous à Documentation de l'API Gson pour plus de détails. J'espère que cela vous sera utile.
JSONArray est juste une sous-classe d'objet, donc si vous souhaitez extraire les objets JSON d'un objet JSONArray, JSONArray n'a aucun moyen pratique de le faire. Vous devez donc obtenir chaque objet JSON et remplir votre liste ArrayList vous-même.
Voici un moyen simple de le faire:
ArrayList<JSONObject> arrayList = new ArrayList(myJSONArray.length());
for(int i=0;i < myJSONArray.length();i++){
arrayList.add(myJSONArray.getJSONObject(i));
}
MODIFIER:
OK, vous avez édité votre code pour montrer que vous utilisez GSON. C'est un cheval d'une couleur différente. Si vous utilisez com.google.gson.JsonArray au lieu de JSONArray, vous pouvez utiliser la méthode Gson.fromJson () pour obtenir un ArrayList.
Voici un lien: Gson - convertir de Json en une ArrayList typée
Malheureusement, cela nécessitera un peu de travail de votre part. Gson ne prend pas en charge la désérialisation des collections génériques d’objets arbitraires. La rubrique Sérialisation et désérialisation de la collection avec des objets de types arbitraires dans le guide d'utilisation Gson répertorie trois options permettant de réaliser les tâches qui vous intéressent. Pour citer les parties pertinentes du guide:
Vous pouvez sérialiser la collection avec Gson sans rien faire de spécifique:
toJson(collection)
écrira la sortie souhaitée. Cependant, la désérialisation avecfromJson(json, Collection.class)
ne fonctionnera pas, car Gson ne sait pas comment mapper l'entrée aux types. Gson nécessite que vous fournissiez une version généralisée du type de collection dansfromJson
. Donc, vous avez trois options:Option 1 : Utilisez l'API d'analyse syntaxique de Gson (analyseur de flux continu de bas niveau ou l'analyseur syntaxique DOM JsonParser) pour analyser les éléments du tableau, puis utilisez
Gson.fromJson()
sur chacun des éléments du tableau. C'est l'approche privilégiée. Voici un exemple qui montre comment faire cela.Option 2 : Enregistrez un adaptateur de type pour
Collection.class
qui examine chacun des membres du tableau et les mappe aux objets appropriés. L'inconvénient de cette approche est qu'elle va gâcher la désérialisation d'autres types de collection dans Gson.Option 3 : Enregistrez un adaptateur de type pour
MyCollectionMemberType
et utilisezfromJson
avecCollection<MyCollectionMemberType>
Cette approche est pratique uniquement si le tableau apparaît en tant qu'élément de niveau supérieur ou si vous pouvez modifier le type de champ contenant le la collection doit être de typeCollection<MyCollectionMemberType>
.
Voir la documentation pour plus de détails sur chacune des trois options.
on commence à partir de la conversion [JSONArray -> List <JSONObject>]
public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array)
throws JSONException {
ArrayList<JSONObject> jsonObjects = new ArrayList<>();
for (int i = 0;
i < (array != null ? array.length() : 0);
jsonObjects.add(array.getJSONObject(i++))
);
return jsonObjects;
}
next crée une version générique remplaçant array.getJSONObject (i ++) par POJO
exemple :
public <T> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array)
throws JSONException {
ArrayList<Tt> tObjects = new ArrayList<>();
for (int i = 0;
i < (array != null ? array.length() : 0);
tObjects.add( (T) createT(forClass, array.getJSONObject(i++)))
);
return tObjects;
}
private static T createT(Class<T> forCLass, JSONObject jObject) {
// instantiate via reflection / use constructor or whatsoever
T tObject = forClass.newInstance();
// if not using constuctor args fill up
//
// return new pojo filled object
return tObject;
}