第一行代碼-10.4 解析JSON格式數據

  和XML相比,JSON的優勢在於體積小,網絡上傳輸的時候更省流量,但是缺點在於語義性較差,看起來不如XML直觀。
  準備工作:創建get_data.json,然後輸入內容:

[{"id":"5","version":"5.5","name":"Angry Birds"},
{"id":"6","version":"7.0","name":"Clash of Clans"},
{"id":"7","version":"3.5","name":"Hey Day"}]

  依然是在本地測試打開這個文件,效果如下:

1、使用JsonObject
  直接展示代碼和效果:

private void parseJSONWithJSONObject(String jsonData) {
    try {
        JSONArray jsonArray = new JSONArray(jsonData);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            String id = jsonObject.getString("id");
            String name = jsonObject.getString("name");
            String version = jsonObject.getString("version");
            Log.d("MainActivity", "id is " + id);
            Log.d("MainActivity", "name is " + name);
            Log.d("MainActivity", "version is " + version);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

這裏寫圖片描述

2、使用GSON
  GSON的功能更加強大,不過它本身並沒有添加到Android的API中,需要下載GSON的json包,然後添加到工程目錄下的libs文件夾內。
這裏寫圖片描述
  然後說明一下GSON的用法:其實它主要就是可以將一段JSON 格式的字符串自動映射成一個對象,從而不需要我們再手動去編寫代碼進行解析了。
  比如說一段JSON 格式的數據如下所示:{“name”:”Tom”,”age”:20}
  那我們就可以定義一個Person 類,並加入name 和age 這兩個字段,然後只需簡單地調用如下代碼就可以將JSON 數據自動解析成一個Person 對象了:

Gson gson = new Gson();
Person person = gson.fromJson(jsonData, Person.class);

  如果需要解析的是一段JSON 數組會稍微麻煩一點,我們需要藉助TypeToken 將期望解析成的數據類型傳入到fromJson()方法中,如下所示:

List<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>()
{}.getType());

  下面就來測試一下它的用法:首先創建App類:

// App.java
public class App {

    private String id;

    private String name;

    private String version;

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setVerison(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }
}

  然後修改MainActivity中的代碼,如下:

private void parseJSONWithGSON(String jsonData) {
    Gson gson = new Gson();
    List<App> appList = gson.fromJson(jsonData, new TypeToken<List<App>>(){}.getType());
    for (App app : appList) {
        Log.d("MainActivity", "id is " + app.getId());
        Log.d("MainActivity", "name is " + app.getName());
        Log.d("MainActivity", "version is " + app.getVersion());
    }
}

  最終效果和前面一樣,就不展示了。

發佈了79 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章