1. 程式人生 > >Android JSON資料格式的解析,與簡單物件、帶泛型的List和Map的轉換,以及GSON的使用

Android JSON資料格式的解析,與簡單物件、帶泛型的List和Map的轉換,以及GSON的使用

首先,這裡要先說一下 JSON 的語法。

1、使用 JSON 語法建立物件


        如圖,建立 object 時,總是以 “{” 開始,以 “}” 結束,物件的每個屬性和屬性值之間以英文冒號 “:” 隔開,多個屬性定義之間以英

文逗號 “,” 隔開。語法格式如下:

object = 
{
    name1 : value1,
    name2 : value2,
    ...
}
        使用 JSON 語法建立 JavaScript 物件是,屬性值不僅可以是普通字串,也可以是任何基本資料型別,還可以是函式、陣列,

至是另外一個 JSON語法建立的物件。例如:

person = 
{
    name : 'liuwan',
    age : 24,
    // 使用 JSON 語法為其指定一個屬性
    son : {
        blog : 'csdn',
        git : 'github'
    },
    // 使用 JSON 語法為其直接分配一個方法
    info : function()
    {
        document.writeln("姓名:" + this.name);
    }
}

2、使用 JSON 語法建立數


        如圖,JSON 建立陣列總是以英文方括號 “[” 開始,然後依次放入陣列元素,元素與元素之間以英文逗號 “,” 隔開,最後以英文反

方括號 “]” 結束。使用 JSON建立陣列的語法格式如下:

arr = [value1 , value2 ...]
3、Android 對 Json 的支援

        幸運的是,Android 系統內建了對 JSON 的支援,在 Android SDK 的 org.json 包下提供了JSONObject、JSONArray 等類,通過

這些類可以很方便的完成 JSON 字串與 JSONObject、JSONArray 之間的互相轉換。

        JSONObject :代表一個 JSON 物件,它可完成 Java 物件與 JSON 字串之間的相互轉換。

        JSONArray :代表一個 JSON 陣列,它可完成 Java 集合與 JSON字串之間的相互轉換。

下面是一個Android內建 JSON 解析的 Demo:

public class JsonTools {

    public JsonTools() {
    }

    public static Person getPerson(String key, String jsonString) {
        Person person = new Person();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONObject personObject = jsonObject.getJSONObject("person");
            person.setId(personObject.getInt("id"));
            person.setName(personObject.getString("name"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return person;
    }

    public static List<Person> getPersons(String key, String jsonString) {
        List<Person> list = new ArrayList<Person>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Person person = new Person();
                person.setId(jsonObject2.getInt("id"));
                person.setName(jsonObject2.getString("name"));
                list.add(person);
            }
        } catch (Exception e) {
        }
        return list;
    }

    public static List<String> getList(String key, String jsonString) {
        List<String> list = new ArrayList<String>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                String msg = jsonArray.getString(i);
                list.add(msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public static List<Map<String, Object>> listKeyMaps(String key, String jsonString) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Map<String, Object> map = new HashMap<String, Object>();
                Iterator<String> iterator = jsonObject2.keys();
                while (iterator.hasNext()) {
                    String json_key = iterator.next();
                    Object json_value = jsonObject2.get(json_key);
                    if (json_value == null) {
                        json_value = "";
                    }
                    map.put(json_key, json_value);
                }
                list.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
}

4、GSON

        GSON 是一個 Java 類庫,可以把 Java 物件轉換成 JSON 資料,也可以把 JSON 字串轉換成 Java 物件,支援任意複雜的 

Java 物件,包括沒有原始碼的對象。

下面是一個利用 GSON 解析 JSON 的 Demo:

public class GsonTools {

    public GsonTools() {
    }

    public static <T> T getPerson(String jsonString, Class<T> cls) {
        T t = null;
        try {
            Gson gson = new Gson();
            t = gson.fromJson(jsonString, cls);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }

    public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
        List<T> list = new ArrayList<T>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
            }.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public static List<String> getList(String jsonString) {
        List<String> list = new ArrayList<String>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
            }.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public static List<Map<String, Object>> listKeyMaps(String jsonString) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<Map<String, Object>>>() {
            }.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}
最後附上 GSON 的下載地址:https://github.com/google/gson