2012-03-13 80 views
4

說我有一個JSON字符串,如:用GSON解析JSON數組和子數組?

{"title":"aaa","url":"bbb","image":{"url":"ccc","width":"100","height":"200"}, ...

我訪問:

import com.google.gson.annotations.SerializedName; 

public class accessorClass { 

    @SerializedName("title") 
    private String title; 

    @SerializedName("url") 
    private String url; 

    @SerializedName("image") 
    private String image; 

    // how do I place the sub-arrays for the image here? 
    ... 


    public final String get_title() { 
     return this.title; 
    } 

    public final String get_url() { 
     return this.url; 
    } 

    public final String get_image() { 
     return this.image; 
    } 

    ... 

} 

我的主:

  Gson gson = new Gson(); 
      JsonParser parser = new JsonParser(); 
      JsonArray Jarray = parser.parse(jstring).getAsJsonArray(); 

      ArrayList<accessorClass > aens = new ArrayList<accessorClass >(); 

      for(JsonElement obj : Jarray) 
      { 
       accessorClass ens = gson.fromJson(obj , accessorClass .class); 
       aens.add(ens); 
      } 

你認爲將是最好的方式在這裏獲取圖像的子陣列?

回答

3

僅供參考,如果你的JSON是一個數組:{"results:":[{"title":"aaa","url":"bbb","image":{"url":"ccc","width":"100","height":"20...},{}]}

然後,你需要一個包裝類:

class WebServiceResult { 
    public List<AccessorClass> results; 
} 

如果你的JSON未格式化這樣,那麼你對於循環創建會做,(如果不是笨重的話,如果你的JSON形成如上)會更好。

創建映像類

class ImageClass { 
    private String url; 
    private int width; 
    private int height; 

    // Getters and setters 
} 

然後改變你的AccessorClass

@SerializedName("image") 
    private ImageClass image; 

    // Getter and setter 

然後GSON輸入字符串

Gson gson = new Gson(); 
AccessorClass object = gson.fromJson(result, AccessorClass.class); 

完成任務。

+0

謝謝,似乎工作! – 2012-03-13 16:03:07

+0

沒問題..再加一點點來解釋你的json應該如何格式化,但應該像你一樣工作。 :) – 2012-03-13 16:04:30