1. 程式人生 > >Android 網路獲取資料之Json解析

Android 網路獲取資料之Json解析

1.簡介

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。

JSON資料作為目前網路中主流的資料傳輸格式之一,應用十分廣泛。

2. Json資料格式(兩種)

Json資料有兩種格式:

(1)物件 :物件表示為“{}”擴起來的內容,資料結構為 {key:value,key:value,…}的鍵值對的結構。 如:{id:10086,name:張三}
(2)陣列:陣列表示為“[ ]” 括起來的內容,資料結構為 [ value, value,value,…] 的單值形式。 如:[張三,李四、王五]

在網路獲取的資料中,一般表現為兩種格式巢狀的形式。

3.Json資料的常用類和介面

    JSONObject  --------->  json物件
    JSONArray   ----------> json對組物件

4. Json 的解析方式

(1)採用java 原生的Json解析

(2) Google 提供的Gson解析方式

(3) Alibaba 提供的FastJson解析方式

5.下面分別使用Json的三種解析方式來解析下面的json字串

{
    "data":[
        {
            "id":"5613",
            "title":"茶百科androidV1.2新功能簡介"
, "name":"茶百科androidV1.2新功能簡介", "link":"http://sns.maimaicha.com/news/detail/5613", "content":"1、 更新頁面佈局,增加首次登陸提示頁。 2、 增加欄目導航,按照分類列表展示。" }, { "id":"5697", "title":"雅安茶”旺季被腰斬 茶企建“愛心茶園”解困", "name":"雅安茶”旺季被腰斬 茶企建“愛心茶園”解困"
, "link":"http://sns.maimaicha.com/news/detail/5697", "content":"雅安,一個在地震中被全國關注的城市。它是茶馬古道的起源地,是世界上人工種茶最早的地方,有著深厚的茶文化底蘊。" } ]
, "errorMessage":"success" }

5.1 首先對上面的Json資料進行格式分析

(1)最外層:一個大括號包裹的 Json 物件,根據{key,value }格式,key=data ; value=括號中包裹的陣列;

(2)第二層:一箇中括號包裹的Json數組裡面有兩個物件(綠色部分)表示的值,根據 [ value,value,value..]格式,value=大括號包裹的 id,title,name,link和content;

(3)第三層:可以把裡面的value值,封裝成一個物件來處理。

5.2 建立一個類來對( id,title,name,link和content)等進行封裝

public class Tea {
    private String id;
    private String title;
    private String link;
    private String content;

    public Tea() {
        super();
    }

    public Tea(String id, String title, String link, String content) {
        super();
        this.id = id;
        this.title = title;
        this.link = link;
        this.content = content;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String toString() {
        return "Tea [id=" + id + ", title=" + title + ", link=" + link
                + ", content=" + content + "]";
    }
}

5.3 原生Json 解析

public static List<Tea> getJsonData(String json){
        List<Tea> list=new ArrayList<>();
//整個json字串為一個 JSONObject 物件
            JSONObject jsonObject=new JSONObject(json);
 // 返回data 對應的value值:這裡表示[]裡面的內容
            JSONArray jsonArray=jsonObject.getJSONArray("data");

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject object=jsonArray.getJSONObject(i);
                String id=object.getString("id");
                String title=object.getString("title");
                String name=object.getString("name");
                String link=object.getString("link");
                String content=object.getString("content");
                Tea tea=new Tea(id,title,name,link,content);
                list.add(tea);
            }
            return list;
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

5.4 Gson解析

首先要新增關於Gson 的第三方包 ,eclipse可以到網上下載jar包,然後新增依賴。使用 Android studio開發的可以直接在 File/ Project Structure/Dependencies中選擇com.google.code.gson:gson:2.7 然後新增依賴即可。新增成功如下所示:

這裡寫圖片描述

Gson 解析的 java 程式碼

public static List<Tea> parseJSON(String json) {
        List<Tea> list = new ArrayList<>();
        try {
            JSONObject jsonObject = new JSONObject(json);
            JSONArray array = jsonObject.getJSONArray("data"); //java提供的原生的類

             //Gson解析
            Gson gson = new Gson();
            TypeToken<List<Tea>> type = new TypeToken<List<Tea>>() {
            };
            list = gson.fromJson(array.toString(), type.getType());
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

5.5 FastJson解析

FastJson也要引入第三方的工具包,eclipse可以下載然後新增依賴;Android Studio可以直接在File/ Project Structure/Dependencies 中找到 com.alibaba:fastjson:1.2.14 新增依賴即可,新增成功如下圖:

這裡寫圖片描述

FastJson 解析程式碼

 public static List<Tea> parseJSONData(String json){
        List<Tea> list = new ArrayList<>();
        try {
            JSONObject jsonObject = new JSONObject(json);
            JSONArray array = jsonObject.getJSONArray("data");//java原生的類

          //FastJson 解析
            list=JSON.parseArray(array.toString(), Tea.class);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

6. 總結

(1)原生的Json解析,需要根據json資料的結構,一步步的把資料獲取出來,然後根據資料進行封裝。

(2)Google 的 Gson 解析和 Alibaba 的FastJson解析,都可以把需要封裝的部分直接從json資料中提取出來,不需要把具體資料提取出來再進行封裝。相比起來Gson解析和FastJson解析,比原生的Json解析更加便捷。建議使用後兩種。