2012-02-08 10 views
34

Actualmente estoy trabajando en una aplicación nativa de Android con front end webView.Gson convierte una matriz de objetos de datos en json - Android

que tienen algo así como:

public class dataObject 
{ 
    int a; 
    String b; 
} 

y en la actividad,

me han hecho una serie de dataObject, decir dataObject x [5];

Ahora quiero pasar estos 5 dataObject a mi interfaz javascript webView como JSON en una función de devolución de llamada.

Miré a través de Internet, parece que la mayoría de los tutoriales hablan sobre cómo convertir fromJson(). No hay mucho sobre toJson(). Encontré uno que me enseñó que dataObject.toJson(), funcionaría.

Pero, ¿cómo puedo pasar los 5 dataObjects?

+1

tratan 'cadena JSON = new GSON(). ToJSON (DataObjects)' donde DataObjects es un dataObject [] – reTs

Respuesta

81

Aquí hay un ejemplo completo sobre cómo usar Gson con una lista de objetos. Así se demostrará exactamente cómo convertir a/de JSON, cómo hacer referencia a las listas, 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; 
    } 
    } 

} 

compilarlo:

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

Y finalmente para ejecutarlo:

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

Tenga en cuenta que si está utilizando Windows, tendrá que cambiar : con ; en los dos comandos anteriores.

Después de que lo ejecute, debería ver el siguiente resultado:

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

Tenga en cuenta que esto es sólo un programa de línea de comandos para demuestran cómo funciona, pero los mismos principios se aplican dentro de la entorno de Android (referencia libs tarro, etc.)

+0

es el comportamiento mismo para DataObject [] en contraposición a la lista ? – lalitm

+0

Respondiendo a mi propia pregunta: Sí, el comportamiento es el mismo. – lalitm

+0

¡Gracias! funciona –

0

Mi versión de la lista GSON deserialización usando una clase de ayuda:

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; 
    } 

} 

Uso

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