2012-02-08 39 views
34

目前我正在開發一個帶有webView前端的原生android應用程序。Gson將數組對象轉換爲json - Android

我有類似:

public class dataObject 
{ 
    int a; 
    String b; 
} 

和活性,

我已dataObject時的陣列,說dataObject時X [5];

現在我想在回調函數中將這5個dataObject傳遞給我的javascript webView接口作爲JSON。

我通過網絡看了一下,好像大多數教程都談論如何轉換fromJson()。沒有太多關於toJson()。我發現一個教我dataObject.toJson(),會工作。

但我怎樣才能通過所有5個數據對象?

+1

嘗試'字符串JSON =新GSON()的toJSON(數據對象)',其中數據對象是DataObject中[] – reTs 2012-02-08 02:41:03

回答

81

下面是關於如何將Gson與對象列表一起使用的全面示例。這應該證明究竟如何轉換到/從JSON,如何引用列表等

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

} 

要編譯:

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

而且最後運行它:

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

請注意,如果您使用Windows,則必須在前兩個命令中使用;切換:

在運行它,你應該看到下面的輸出:

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

請記住,這僅僅是一個命令行程序演示它是如何工作的,但同樣的原則也適用內Android的環境(引用的jar庫等)

+0

是行爲相同的數據對象[],而不是列出? – lalitm 2014-05-10 06:46:32

+0

回答我自己的問題:是的,行爲是一樣的。 – lalitm 2014-05-10 07:38:53

+0

謝謝!它的工作原理 – 2014-12-30 13:16:20

0

我使用一個輔助類GSON列表反序列化的版本:

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

} 

使用

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