Android - 将此JSON反序列化为POJO

时间:2014-01-16 09:00:04

标签: java android json gson

这是我的JSON:

{
  "results": [
    {
      "user_id": "1",
      "item_id": "18630",
      "name": "Unnamed Item",
      "price": "0",
      "description": "",
      "created_at": "2014-01-16 15:31:36",
      "thumbnail": {
        "image50": "http://www.example.com/adsa.jpg",
        "image100": "hhttp://www.example.com/adsa.jpg"
      },...

我正在进行反序列化吗?

public class ItemListModel {

    private String user_id;
    private String item_id;
    private String name;
    private String price;
    private String category;
    private ArrayList<ThumbnailResponse> thumbnail;

    public ItemListModel(){}

    // getters
}

public class ThumbnailResponse {
    private String image50;
    private String image100;

    public ThumbnailResponse(){     
    }

    //getters
 }

我很困惑,我们何时在JSON文件中使用ArrayList,Array或List作为数组或对象?

还有一件事,如果是这样的话,我还需要将results作为数组吗?

3 个答案:

答案 0 :(得分:3)

正如你所说的那样

"thumbnail": {
        "image50": "http://www.example.com/adsa.jpg",
        "image100": "hhttp://www.example.com/adsa.jpg"
      }

不是JsonArray。因此,您无需将ThumbnailResponse用作ArrayList ItemListModel

你的模特应该是

public class ItemListModel {

    private String user_id;
    private String item_id;
    private String name;
    private String price;
    private String category;
    private ThumbnailResponse thumbnail; // Not array List

    public ItemListModel(){}

    // getters
}

并且

  

还有一件事,如果那样的话,我是否也需要将结果作为数组   案件?

您的主数据容器应包含ItemListModel的ArrayList。如下所示

ArrayList<ItemListModel> results = new ArrayList<ItemListModel>(); 

答案 1 :(得分:1)

    json中的
  • [] - &gt;数组
  • json中的
  • {} - &gt;对象或地图

在你的情况下

// change
private ArrayList<ThumbnailResponse> thumbnail;
// to
private Map<String,String> thumbnail;

如果你想要你声明你的java对象的方式,你需要提供一个变换器(取决于你正在使用的框架)

答案 2 :(得分:1)

 List<ItemListModel > ItemListModel ;

         try {

        Type listType = new TypeToken<List<ItemListModel >>(){}.getType();

        result= (List<ItemListModel >) gson.fromJson(result, listType);

    } catch (Exception e) {
        Log.e("Parsing exeption", e.getLocalizedMessage(), e);

    }
this should work