2012-02-08 13 views
34

現在、私はwebViewフロントエンドでネイティブアンドロイドアプリを開発中です。Gsonはデータオブジェクトの配列をjsonに変換します。 - Android

私のようなものがあります:私は、データオブジェクトの配列をした

public class dataObject 
{ 
    int a; 
    String b; 
} 

や活動で、

を、データオブジェクトは、[5]×言います。

今、これら5つのデータオブジェクトをJavaScriptのwebViewインターフェイスにコールバック関数のJSONとして渡したいとします。

私はほとんどのチュートリアルのように、fromJson()の変換方法について話しているようです。 toJson()についてはあまりよくありません。私はdataObject.toJson()が働いてくれることを教えてくれた人が見つかりました。

しかし、5つのデータオブジェクトすべてをどのように渡すことができますか?

+1

文字列のJSONは=新しいGson( 'てみてください)。toJson(DataObjectには)'のDataObjectはDataObjectのである。ここで、[] – reTs

答えて

81

ここでは、Gsonをオブジェクトのリストとともに使用する方法の包括的な例を示します。これはTest.javaなど、

をに変換する方法/ JSONから、リストを参照する方法正確を証明する必要があります

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を使用している場合、前の2つのコマンドで:;に切り替える必要があることに注意してください。

あなたはそれを実行した後、次のような出力が表示されるはずです。これはにのみコマンドラインプログラムであることに留意してください

[{"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の環境(ジャーLIBSを参照する、など)

+0

を一覧表示するとは対照的に[]のDataObjectのための同じ動作ですか? – lalitm

+0

自分の質問に答える:はい動作は同じです。 – lalitm

+0

ありがとう!!それは動作します –

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); 
関連する問題