34


10

Gson transforme un tableau d’objets de données en JSON - Android

Actuellement, je travaille sur une application Android native avec WebView Front End.

J’ai quelque chose comme:

public class dataObject
{
  int a;
  String b;
}

et en activité,

J’ai créé un tableau de dataObject, disons dataObject x [5];

Maintenant, je veux passer ces 5 dataObject à mon interface javascript webView en tant que JSON dans une fonction de rappel.

J’ai regardé sur Internet, il semble que la plupart des tutoriels parlent de la conversion de fromJson (). Il n’y a pas grand chose sur toJson (). J’en ai trouvé un qui m’a appris que dataObject.toJson (), fonctionnerait.

Mais comment passer les 5 dataObjects?

2 Answer


83


Voici un exemple complet sur la façon d’utiliser Gson avec une liste d’objets. Cela devrait montrer exactement comment convertir vers / depuis Json, comment référencer des listes, etc.

  • Test.java *:

import com.google.gson.Gson;
import java.util.List;
import java.util.ArrayList;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;


public class Test {

  public static void main (String[] args) {

    // Initialize a list of type DataObject
    List objList = new ArrayList();
    objList.add(new DataObject(0, "zero"));
    objList.add(new DataObject(1, "one"));
    objList.add(new DataObject(2, "two"));

    // Convert the object to a JSON string
    String json = new Gson().toJson(objList);
    System.out.println(json);

    // Now convert the JSON string back to your java object
    Type type = new TypeToken>(){}.getType();
    List inpList = new Gson().fromJson(json, type);
    for (int i=0;i

Et enfin pour l’exécuter:

java -cp "gson-2.1.jar:." Test

Notez que si vous utilisez Windows, vous devrez changer : avec ; dans les deux commandes précédentes .

Après l’avoir exécuté, vous devriez voir la sortie suivante:

[{"a":0,"b":"zero"},{"a":1,"b":"one"},{"a":2,"b":"two"}]
a = 0, b = zero
a = 1, b = one
a = 2, b = two

Gardez à l’esprit qu’il ne s’agit que d’un programme en ligne de commande pour démontrer comment cela fonctionne, mais les mêmes principes s’appliquent dans l’environnement Android (référence aux bibliothèques jar, etc.)


0


Ma version de désérialisation de la liste gson à l’aide d’une classe d’assistance:

public List getList(Class type, JSONArray json) throws Exception {
    Gson gsonB = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    return gsonB.fromJson(json.toString(), new JsonListHelper(type));
}



public class JsonListHelper implements ParameterizedType {

  private Class<?> wrapped;

  public JsonListHelper(Class wrapped) {
    this.wrapped = wrapped;
  }

  public Type[] getActualTypeArguments() {
    return new Type[] {wrapped};
  }

  public Type getRawType() {
    return List.class;
  }

  public Type getOwnerType() {
    return null;
  }

}

Usage

List objects = getList(Object.class, myJsonArray);