2016-04-14 16 views
1

gsonを使用してJsonObjectsのJsonArrayを構築しようとしています。 各JsonObjectにはように、次の形式を取るGsonは、JsonObjectsの単純なJsonArrayを作成します。

{"image":"name1"} 
{"image":"name2"} 

となります。

名前の文字列配列( "name1"、 "name2"、...) 文字列配列を直接JsonArrayに変換できません。私はJsonObjectsを繰り返し作成し、それをJsonArrayに追加しようとしています。

 JsonObject innerObject; 
     JsonArray jArray = new JsonArray(); 
     for(int i = 0; i<names.length; i++) 
     { 
      innerObject = new JsonObject(); 
      innerObject.addProperty("image",names[i]); 
      jArray.add(innerObject); 
     } 

しかし、私は理解し、JsonArrayでadd方法はJsonElementをとり、ここで私はJsonObjectを与えています。 JsonObjectをJsonElementに変換する方法が見つかりませんでした。 私がこれをすると、gsonの使用の全ポイントがなくなります。より良い方法がありますか?

+0

'JsonObject'は' JsonElement'を拡張しているので、 'add(JsonElement)'メソッドを使って 'JsonArray'に追加することはできません。変換は必要ありません。 – azurefrog

+0

あなたの助けをありがとう – user11

答えて

1

あなたはGSONあなたがループしてデータを操作することはできませんgsonのポイントだJSON文字列

String json = new Gson().toJson(images); 

を取得するには

List<Image>images = new Gson().fromJson(json, Image[].class); 

をオブジェクトに変換するために、このようにそれを使用する使用しようとしている場合とスタッフ。強力なモデル解析を利用する必要があります。

+0

助けてくれてありがとう – user11

5

まず、例えば、単一のJSONオブジェクトを表すクラスを作成します。:

class MyObject { 
    private String image; 

    public MyObject(String name) { image = name; } 
} 

Gsonは、どのようなプロパティ名を使用するために決定するために、クラスの変数名を使用します。

次に、利用可能なデータを使用して配列またはリストを作成します。最後に

ArrayList<MyObject> allItems = new ArrayList<>(); 
allItems.add(new MyObject("name1")); 
allItems.add(new MyObject("name2")); 
allItems.add(new MyObject("name3")); 

、JSONにシリアライズするには、実行します。

String json = new Gson().toJson(allItems); 

そしてjsonから配列に戻ってデータを取得する:簡単な(デ)シリアライズするため

MyObject[] items = new Gson().fromJson(json, MyObject[].class); 

、そこにJsonクラスを直接扱う必要はありません。

+0

助けてくれてありがとう! – user11

+0

驚くばかり!あなたのサンプルコードは私を助けました!ありがとう。 – bably

関連する問題