觀念:

JSON(Java Script Object Notation) 是種超輕量數據交換格式, 只有兩種組成元素

(a) object 定義是以key : value的方式表示, 最外層會用{}包覆, key值使用字串,

然後用 : 隔開 value值, 每組key : value 用 , 來隔開, 舉例如下:

{ "string": "Hello World" , "int" : 123}

(b) array 定義是以[]來包覆一連串的value, 各value中間用, 來隔開, 舉例如下:

[1,2,3, 45, "abc"]

接著在value的定義上, 可以是 string, number, object, array, true, false, null

而一些特定符號則是用 \ 這跳脫字元來表示, 像是 \" 來表示"

最後在number的定義則是去除8和16進位格式, 但是有科學記號e

 

1. 首先介紹一下JSON的官網http://www.json.org/ ,

建議是可以讀一遍, 上面有各國語言的選項, 按下中文就可以快速理解了 

01.png

 

2. 接著介紹一個線上解析JSON格式的網站 http://jsoneditoronline.org/

通常拿到JSON格式的資料, 建議先貼上去檢查一下, 避免解讀一值不出來,

結果是JSON格是有錯的大烏龍

02.png

 

3. 在來到android官網http://developer.android.com/reference/org/json/package-summary.html

查看JSON相關文件, 總共就四種類別

JSONArray  定義了JSON Array的物件
JSONObject  定義了JSON Object的物件
JSONStringer  用來建造JSON格式的文件
JSONTokener  用來解析JSON類別

03.png

 

4. 接著點開JSONTokener的頁面, 利用官方介紹的方法來建立一個JSONObject

04.png

 

5. 開啟Eclipse, 先宣告一個字串, 然後建立JSON格式的字串內容,

這邊就按照步驟2網頁預設的值來建立一個字串, 要注要的是 利用 \" 來表達內文的"

字串的內文如下:

        String jsonObj = "{"
           + " \"array\":[1, 2, 3], " 
           + " \"boolean\": true, "
           + " \"null\": null,"
           + " \"object\": { \"a\": \"b\", \"c\": \"d\", \"e\": \"f\" },"
           + " \"string\": \"Hello World\" "
           + "}";

05.png

 

6. 接著利用Log的方法來印出剛剛建立的字串

06.png

 

7. 可以利用DDMS 在後台看到印出來的字串確認是否正確

07.png

 

8. 宣告一個JSONObject, 並給予剛建立字串的值

JSONObject object = (JSONObject) new JSONTokener(jsonObj).nextValue();

08.png

 

9. 由於JSON IO 會有例外, 所以要用try catch來處理

09.png

 

10. 然後開始解析JSON物件, 第一個物件就是array, 所以宣告一個JSON Array

並利用getJSONArray("key值")的方式把值放進去

JSONArray array = object.getJSONArray("array"); 

10.png

 

11. JSONArray 是利用 .get資料型態(索引)的方式來取值,

這例子的值剛好是int, 所以用getInt, 如果是字串 就是用getString

然後這邊有3個值, 分別就用3個變數來裝它

11.png

 

12. 取得值之後, 用Log來檢驗是否正確

12.png

 

13. 進入DDMS可以看到, 確實得到正確值了

13.png

 

14. 接著是boolean值, 再度回到JSONObject, 用.get資料型態("Key值")來取得

所以宣告一個boolean值來裝, 並用Log把他印出來

    boolean bl = object.getBoolean("boolean");
    Log.d(TAG, "boolean = "+ bl);

14.png

 

15. 接著是Null值, 這邊可以用.isNull("Key值")來判斷, 並用Log印出來

    boolean isNull = object.isNull("null");

    Log.d(TAG, "isNull = "+ isNull);

15.png

 

16. 接著是Object內裝著Object, 原理一樣, 就在用一個Object來裝

之後再去解析, 並在最後用Log印出來

   JSONObject obj = object.getJSONObject("object");
   String o0 = obj.getString("a");
   String o1 = obj.getString("c");
   String o2 = obj.getString("e");
   Log.d(TAG, "o0="+o0+", o1="+o1+", o2="+o2);

16.png

 

17. 最後的value是一個String, 所以用.getString("Key值")來取得

   String string = object.getString("string");
   Log.d(TAG, "string = "+ string);

17.png

 

18. 最後到DDMS那邊看剛剛所取得的結果, 就成功解析了這例子

18.png  

arrow
arrow

    RX1226 發表在 痞客邦 留言(1) 人氣()