JSON數(shù)據(jù)格式(一)
JSON
javaScript 對(duì)象表示法(Javascript Object Notation)。已經(jīng)成為現(xiàn)在互聯(lián)網(wǎng)中數(shù)據(jù)交換格式。
Android API
Android API中有JSON解析,可以將文件、輸入流中的數(shù)據(jù)轉(zhuǎn)化為JSON對(duì)象,然后從對(duì)象中獲取JSON保存的數(shù)據(jù)內(nèi)容。 Android 中org.json包下,提供JSONObject、JSONArray、JSONStringer、JSONTokener、JSONException。
Json優(yōu)勢(shì)
易讀易編寫,也易于機(jī)器解析和生成。
兩種數(shù)據(jù)結(jié)構(gòu)
“名稱/值”對(duì)的集合,可以被理解為對(duì)象(object),記錄(Record),結(jié)構(gòu)(struct),字典(Dictionary),哈希表(HashTable),有鍵列表(Keyed list),或者掛鏈數(shù)組(Assocation arra)值的有序列表(An ordered list of values)。大部分語(yǔ)言里理解為數(shù)組。JSON Object
以key/value對(duì)形式{“名稱”:值}存在的無(wú)序的jsonObject對(duì)象,鍵值對(duì)之間用“,”隔開。其中key值必須是string類型,value可以是JSONObjects、JSONArrays、Strings、Booleans、Integers、Longs、Doubles或者NULL等的任意組合。如:{“name”:”jack”}
JSON Array
有序的value的集合,數(shù)組是值(value)的有序集合,使用“[ ]”括起來(lái),值之間用“,”逗號(hào)分隔,value可以是JSONObjects、JSONArrays、Strings、Booleans、Integers、Longs、Doubles或者NULL等的任意組合,如:{“info”:[{“name”:”jack”},{“name”:”rose”}]},{value1,value2,value3}。這些結(jié)構(gòu)可以嵌套。
JSONObject與JSONArray常用的方法
JSONObject
JSONObject.put()  //將值放入其中JSONObject.getXXX() //若不存在此值,則返回異常JSONObject.optXXX()  //若不存在此值,則返回空字符串具體可以參照官方鏈接  http://www.android-doc.com/reference/org/json/JSONObject.htmlJSONArray
JSONArray.put()JSONArray.getXXX()JSONArray.optXXX()JSONObject對(duì)象的創(chuàng)建
//創(chuàng)建JSONObject        PRivate String createJSONObject() {            JSONObject object = new JSONObject();            try {                object.put("name", "jack_obj");                object.put("age", 11);                object.put("undergraduate", true);    //            object.put("salary", null); //這種輸入null值,輸出在屏幕中不顯示salary這個(gè)key鍵。                object.put("salary", JSONObject.NULL); //這個(gè)則會(huì)顯示salary這個(gè)key,還有null值            } catch (JSONException e) {                e.printStackTrace();            }            return object.toString();        }JSONArray對(duì)象的創(chuàng)建
//創(chuàng)建JSONArray        private String createJSONArray() {            JSONArray array = new JSONArray();            array.put("jack_arr");            array.put(22);            //生成JSONObject對(duì)象放入JSONArray中            JSONObject inner_obj1 = new JSONObject();            try {                inner_obj1.put("name", "Alice");                inner_obj1.put("age", 34);            } catch (JSONException e) {                e.printStackTrace();            }            JSONObject inner_obj2 = new JSONObject();            try {                inner_obj2.put("name", "white");                inner_obj2.put("age", 45);            } catch (JSONException e) {                e.printStackTrace();            }            array.put(inner_obj2);            array.put(inner_obj1);            return array.toString();    }JSONObject解析
//解析JSONObject數(shù)據(jù)            private String parseJSONObject(String json) {                String result = " ";                try {                    JSONObject jsonObject = new JSONObject(json);                    //optString方法會(huì)在對(duì)應(yīng)的key中的值不存在的時(shí)候返回一個(gè)空字符串或者返回你指定的默認(rèn)值,                    // 但是getString方法會(huì)出現(xiàn)空指針異常的錯(cuò)誤。                    String name = jsonObject.optString("name");        //            String name = jsonObject.getString("name");                    String age = jsonObject.optString("age");                    if (!TextUtils.isEmpty(name)) {                        result += "name:" + name;                    }                    if (!TextUtils.isEmpty(age)) {                        result += "age:" + age;                    }                    return result;                } catch (Exception e) {                    e.printStackTrace();                }                return result;            }JSONArray解析
        //parseJSONObject方法是會(huì)在接下來(lái)parseJSONArray()中調(diào)用        private String parseJSONObject(JSONObject jsonObject) {                String result = " ";        /**         * optString方法會(huì)在對(duì)應(yīng)的key中的值不存在的時(shí)候返回一個(gè)空字符串或者返回你指定的默認(rèn)值,         * 但是getString方法會(huì)出現(xiàn)空指針異常的錯(cuò)誤。         * */                String name = jsonObject.optString("name");        //            String name = jsonObject.getString("name");                String age = jsonObject.optString("age");                if (!TextUtils.isEmpty(name)) {                    result += "name:" + name;                }                if (!TextUtils.isEmpty(age)) {                    result += "age:" + age;                }                return result;            }            //解析JSONArray數(shù)據(jù)            private String parseJSONArray(String array) {                String result = " ";                try {                    JSONArray jsonArray = new JSONArray(array);                    result = jsonArray.getString(0);                    result +=jsonArray.getString(1);                    result +=jsonArray.getString(2);                    for (int i = 2; i < jsonArray.length(); i++) {                        JSONObject jsonObject = jsonArray.getJSONObject(i);                        result += parseJSONObject(jsonObject) + "/n/n";        //                result += jsonObject.optString("jack");                    }                } catch (JSONException e) {                    e.printStackTrace();                }                return result.toString();            }