1. 程式人生 > >Gson解析json資料

Gson解析json資料

簡介:

Json資料是類似xml型別的資料轉化格式但是它的傳輸速率遠遠高於xml的解析速率。

這裡簡單的對用gson解析json格式的資料,為什麼說是簡單的介紹呢,因為博主有更簡單的解析方式後期會進行推出或者掃描頭像進

行私聊(公眾號)。


進行整合:

 這裡按照as為例進行整合,在對應model的gradle中加入

<span style="font-size:18px;">compile 'com.google.code.gson:gson:2.2.4'</span>
  如果是用eclipse的話可以進行下載gson架包放到libs資料夾下

 gson下載連結:點選開啟連結

 原始碼下載:點選開啟連結

 GitHub:點選開啟連結

 既然是Json的解析那麼先來一段json

<span style="font-size:18px;">http://apicloud.mob.com/boxoffice/day/query?key=11342cf45e16c&area=CN</span>
對應的資料格式是:

 

{
  "msg": "success",
  "retCode": "200",
  "result": [
    {
      "cur": 1747.74,
      "days": 5,
      "name": "葉問3",
      "sum": 53467.76
    },
    {
      "cur": 1842.6,
      "days": 5,
      "name": "瘋狂動物城",
      "sum": 20840.64
    },
    {
      "cur": 430.67,
      "days": 30,
      "name": "美人魚",
      "sum": 330737.57
    }
 ]
}
這裡顯示的只是區域性的,完整的json資料是 這個

根據Json資料進行構建資料的Model記得反序列化當然不用可以。

public class Model implements Serializable {
    private String msg;
    private String retCode;
    private List<ResultModel> results=new ArrayList<>();


    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getRetCode() {
        return retCode;
    }

    public void setRetCode(String retCode) {
        this.retCode = retCode;
    }

    public List<ResultModel> getResults() {
        return results;
    }

    public void setResults(List<ResultModel> results) {
        this.results = results;
    }
}

因為這個Json資料是JsonArray陣列物件的不是JsonObject的單個物件所以出現集合List<ResultModel>下面是Resultodel的資料物件:

 private double cur;
    private int days;
    private String name;
    private double sum;

    public void setCur(double cur) {
        this.cur = cur;
    }

    public void setDays(int days) {
        this.days = days;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSum(double sum) {
        this.sum = sum;
    }

    public double getCur() {
        return cur;
    }

    public int getDays() {
        return days;
    }

    public String getName() {
        return name;
    }

    public double getSum() {
        return sum;
    }

  資料的Json的解析:

 對了這裡的網路請求引入了xUtils框架,後期將推出xUtils的框架學習,關於xUtils的框架整合

  1、AndroidStudio的整合:

   在對應的gradle下 

compile 'org.xutils:xutils:3.3.32'

 2、eclipse中:

  將xUtilts架包放進libs資料夾中進行add library

  xUtils框架,下載

  如果編輯後出現錯誤可參考我另外一篇部落格,錯誤資訊

 進行資料的獲取:

  為Button設定點選事件進行獲取Json資料然後把資料轉化成物件

  

ic void getMovies(View view) {
        String url = "http://apicloud.mob.com/boxoffice/day/query";
        RequestParams params = new RequestParams();
        params.addQueryStringParameter("key", "11342cf45e16c");
        params.addQueryStringParameter("area", "CN");
        HttpUtils httpUtils = new HttpUtils();
        httpUtils.send(HttpRequest.HttpMethod.GET, url, params, new RequestCallBack<String>() {

            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                Log.i("TAG", responseInfo.result);
                Gson gson = new Gson();
//                Type listType = new TypeToken<LinkedList<Model>>(){}.getType();
                Type type = new TypeToken<Model>() {}.getType();
                Model model = gson.fromJson(responseInfo.result, type);
                List<ResultModel> result = model.getResults();
                Log.i("TAG", model.getRetCode());
                Log.i("TAG", model.getMsg());
                if ("success".equals("success")) {
                    for (int i = 0; i < result.size(); i++) {
                        Log.i("TAG", result.get(i).getCur() + "測試");
                        Log.i("TAG", result.get(i).getDays() + "");
                        Log.i("TAG", result.get(i).getName());
                        Log.i("TAG", result.get(i).getSum() + "");
                    }
                }


            }
這裡做一下簡單的解釋關於下面兩者的區別

gson.fromJson(responseInfo.result, type);
gson.fromJson(responseInfo.result, Model.class);
第一個表示的是當Json資料是JsonArray陣列物件時,採用這種方式進行資料轉化成物件,當資料是JsonObject物件時是使用第二種的比如下面

 
                            {
  "msg": "success",
  "result": {
    "conclusion": "時來運轉,事事如意,功成名就,富貴自來吉"
  },
  "retCode": "200"
}
這裡就把Json資料轉化成了物件Model model = gson.fromJson(responseInfo.result, type);,既然物件獲取到了那麼資料的獲取就比較簡單了。
部落格開始時我說過只是做一下簡單的介紹,對Gson的資料解析Json有更好的解決方案或者說是更好的方法,就是借用 Retrofit網路框架+Gson轉化方式

 
好了,這期是部落格就到這裡了,寫的比較倉促,如果發現錯誤或者描述不當還請多多包涵,zui'ho