java - Gson transforme un tableau d'objets de données en json-Android



(2)

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

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

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



public class JsonListHelper<T> implements ParameterizedType {

  private Class<?> wrapped;

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

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

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

  public Type getOwnerType() {
    return null;
  }

}

Usage

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

https://src-bin.com

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 fait un tableau de dataObject, disons dataObject x [5];

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

J'ai regardé sur Internet, il semble que la plupart des tutoriels expliquent comment convertir fromJson() . toJson() ne parle pas beaucoup. J'ai trouvé un qui m'a appris que dataObject.toJson() , fonctionnerait.

Mais comment puis-je passer tous les 5 dataObjects?


Answer #1

Voici un exemple complet sur l'utilisation de 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<DataObject> objList = new ArrayList<DataObject>();
    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<List<DataObject>>(){}.getType();
    List<DataObject> inpList = new Gson().fromJson(json, type);
    for (int i=0;i<inpList.size();i++) {
      DataObject x = inpList.get(i);
      System.out.println(x);
    }

  }


  private static class DataObject {
    private int a;
    private String b;

    public DataObject(int a, String b) {
      this.a = a;
      this.b = b;
    }

    public String toString() {
      return "a = " +a+ ", b = " +b;
    }
  }

}

Pour le compiler:

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

Et enfin pour le lancer:

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 le résultat suivant:

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

N'oubliez pas qu'il s'agit uniquement d'un programme en ligne de commande permettant de démontrer son fonctionnement, mais les mêmes principes s'appliquent dans l'environnement Android (référencement des bibliothèques JAR, etc.).





gson