亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

android使用Gson來解析json

標簽:
Android

Gson是更流行的解析json的库里,我自己一把很喜欢用Gson来解析,因为直接可以写对象和json文件相对应

对于一个标准的后台返回:

{
   "data": {
      "product_info": {
         "name": "澳斯贝贝 婴儿长袖水晶绒睡袋 100cm 4",
         "image": "http://img01.meituncdn.com/group2/M00/00/78/rBABnFVMXPqAKlu5AAD9lKlBSzE063.jpg",
         "stock": 0
      },
      "task_list": [
         {
            "task_id": 4,
            "status": "进行中"
         }
      ]
   },
   "status": "success",
   "message": null
}

我们可以这样来构造解析对象:

public class HistoryResponse {

    public HistoryData data;
    public String status;
    public String message;
}
public class ProductInfo {
    public String name;
    public String image;
    public int stock;
}
public class HistoryData {
    public ProductInfo product_info;
    public ArrayList<Tasks> task_list;
}
public class Tasks {
    public int id;
    public String status;
}

解析代码很简洁:

public void parseAssertDataUseGson() {
    InputStream is = null;
    try {
        is = this.getAssets().open("json2.json", Context.MODE_PRIVATE);
        int length = is.available();
        byte[] buffer = new byte[length];
        is.read(buffer);
        Reader response = new StringReader(new String(buffer));
        Gson gson = new Gson();
        HistoryResponse mydata = gson.fromJson(response,HistoryResponse.class);
        Log.d("TAG","<<<<mydata="+mydata.data.task_list.get(0).status);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

代码在https://github.com/nickgao1986/StepSport


有一点要注意,对于

[

    {

        "booid": 1,

        "bookName": "aa",

        "icon": "http://pij4ed5ao.bkt.clouddn.com/1.jpg",

        "book_description": "aa1"

    },

    {

        "booid": 2,

        "bookName": "bb",

        "icon": "http://pij4ed5ao.bkt.clouddn.com/22.jpg",

        "book_description": "bb1"

    },

    {

        "booid": 3,

        "bookName": "cc",

        "icon": "http://pij4ed5ao.bkt.clouddn.com/33.jpeg",

        "book_description": "cc1"

    }

]

这样的json,我们需要用以下来解析

private void parseResponse(String response) {
    try{
        Gson gson = new Gson();
        JSONArray jsonArray = new JSONArray(response);
        ArrayList<Book> books;
        mBookResponse = new Gson().fromJson(response, new TypeToken<List<Book>>(){}.getType());

    }catch (Exception ex) {
        ex.printStackTrace();
    }

}
public class Book {

    public int booid;
    public String bookName;
    public String icon;
    public String book_description;
}

才不会出错

如果json出现java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 81这个问题,就代表解析器expected是一个array不过

实际解析的是一个jsonObject的错误

點擊查看更多內容
2人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
全棧工程師
手記
粉絲
6509
獲贊與收藏
303

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消