JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立于語言的文本格式,web開發中這個哥們時常出現在你的程式中,你還不得不解析,一般說到JSON,都會不由自主的對比一下它的前輩XML,XML從設計之初到現在已經有十年的光景,在有些方面的作用已經超出其當時設計XML的初衷,WebService是XML的主要的戰場,在網絡應用場景中由于XML自身的标簽形式和Dom形式的資料,解析相對來說會相對麻煩。這個時候JDouglas Crockford提出了JSON,不寫不知道,才知道上次買的《JavaScript語言精粹》也是這貨寫的,⊙﹏⊙~說多了,進入正題吧:
可讀性:JSON和XML的可讀性不相上下,JSON格式常用的符号是逗号,小括号,冒号,中括号,引号五種,比較簡潔,XML規範的标簽形式,都很易讀易懂。
可擴充性:XML天生有很好的擴充性,JSON也有,沒有什麼是XML能擴充,而JSON卻不能擴充。不過JSON在Javascript主場作戰,可以存儲Javascript複合對象,有着xml不可比拟的優勢。
編碼難度:XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有提供的工具。無工具的情況下,寫JSON會比XML稍微快一點(想對我而言),xml文檔要多很多結構上的字元。
JSON資料格式:
鍵值對的形式:{"Name":"FlyElephant"}

數組是值(value)的有序集合。一個數組以“[”(左中括号)開始,“]”(右中括号)結束。值之間使用“,”(逗号)分隔,例如:[{"Name":"FlyElephant"},{"Name":"中山 郎"}]
值(value)可以是雙引号括起來的字元串(string)、數值(number)、true、false、null、對象(object)或者數組(array)。這些結構可以嵌套.
Json的格式是固定的,就意味着大家可以按照規則自己解析,不過為了提高開發效率,有些工具提供了簡單的功能供大家使用,比如說json-lib,GSON,既然是搞Android,就使用Gsonj解析,Gson下載下傳位址https://code.google.com/p/google-gson/downloads/list?can=1&q=,下載下傳最新的那個即可~之後添加到自己項目中~
不管是開發還是測試都離不開類對象,是以這個時候先建了一個Book類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<code>public</code> <code>class</code> <code>Book {</code>
<code> </code><code>public</code> <code>Book(String bookName, String author) {</code>
<code> </code><code>super</code><code>();</code>
<code> </code><code>BookName = bookName;</code>
<code> </code><code>Author = author;</code>
<code> </code><code>}</code>
<code> </code><code>private</code> <code>String BookName;</code>
<code> </code><code>private</code> <code>String Author;</code>
<code> </code><code>public</code> <code>String getBookName() {</code>
<code> </code><code>return</code> <code>BookName;</code>
<code> </code><code>public</code> <code>void</code> <code>setBookName(String bookName) {</code>
<code> </code><code>public</code> <code>String getAuthor() {</code>
<code> </code><code>return</code> <code>Author;</code>
<code> </code><code>public</code> <code>void</code> <code>setAuthor(String author) {</code>
<code>}</code>
轉換類對象:
<code>Book book=</code><code>new</code> <code>Book(</code><code>"明朝那些事"</code><code>, </code><code>"當年明月"</code><code>);</code>
<code> </code><code>Gson gson=</code><code>new</code> <code>Gson();</code>
<code> </code><code>//生成JSON調用toJSON</code>
<code> </code><code>System.out.println(</code><code>"Book: "</code> <code>+ gson.toJson(book));</code>
<code> </code><code>//解析JSON調用fromJSON</code>
<code> </code><code>Book jsonBook=gson.fromJson(gson.toJson(book), Book.</code><code>class</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"Name:"</code><code>+jsonBook.getBookName()+</code><code>"--Author:"</code><code>+jsonBook.getAuthor());</code>
結果如下:
<code>Book: {</code><code>"BookName"</code><code>:</code><code>"明朝那些事"</code><code>,</code><code>"Author"</code><code>:</code><code>"當年明月"</code><code>}</code>
<code>Name:明朝那些事--Author:當年明月</code>
List<String>和類共同使用
<code>Gson gson = </code><code>new</code> <code>Gson();</code>
<code> </code><code>List<String> list = </code><code>new</code> <code>ArrayList<String>();</code>
<code> </code><code>list.add(</code><code>"北京"</code><code>);</code>
<code> </code><code>list.add(</code><code>"上海"</code><code>);</code>
<code> </code><code>list.add(</code><code>"廣州"</code><code>);</code>
<code> </code><code>list.add(</code><code>"深圳"</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"IT城市:"</code> <code>+ gson.toJson(list));</code>
<code>//注意這裡的第二個參數</code>
<code> </code><code>list = gson.fromJson(gson.toJson(list),</code>
<code> </code><code>new</code> <code>TypeToken<List<String>>() {</code>
<code> </code><code>}.getType());</code>
<code> </code><code>for</code> <code>(String string : list) {</code>
<code> </code><code>System.out.println(string);</code>
<code> </code><code>}</code>
<code> </code><code>Book book=</code><code>new</code> <code>Book(gson.toJson(list), </code><code>"當年明月"</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"Book: "</code> <code>+ gson.toJson(book));</code>
<code> </code><code>Book jsonBook=gson.fromJson(gson.toJson(book), Book.</code><code>class</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"Name:"</code><code>+jsonBook.getBookName()+</code><code>"--Author:"</code><code>+jsonBook.getAuthor());</code>
<code>IT城市:[</code><code>"北京"</code><code>,</code><code>"上海"</code><code>,</code><code>"廣州"</code><code>,</code><code>"深圳"</code><code>]</code>
<code>北京</code>
<code>上海</code>
<code>廣州</code>
<code>深圳</code>
<code>Book: {</code><code>"BookName"</code><code>:</code><code>"[\"北京\",\"上海\",\"廣州\",\"深圳\"]"</code><code>,</code><code>"Author"</code><code>:</code><code>"當年明月"</code><code>}</code>
<code>Name:[</code><code>"北京"</code><code>,</code><code>"上海"</code><code>,</code><code>"廣州"</code><code>,</code><code>"深圳"</code><code>]--Author:當年明月</code>
List<Book>解析:
<code> </code><code>List<Book> list = </code><code>new</code> <code>ArrayList<Book>();</code>
<code> </code><code>Book book1 = </code><code>new</code> <code>Book(</code><code>"明朝那些事"</code><code>, </code><code>"當年明月"</code><code>);</code>
<code> </code><code>Book book2 = </code><code>new</code> <code>Book(</code><code>"盜墓筆記"</code><code>, </code><code>"南派三叔"</code><code>);</code>
<code> </code><code>Book book3 = </code><code>new</code> <code>Book(</code><code>"鬼吹燈"</code><code>, </code><code>"天下霸唱"</code><code>);</code>
<code> </code><code>list.add(book1);</code>
<code> </code><code>list.add(book2);</code>
<code> </code><code>list.add(book3);</code>
<code> </code><code>System.out.println(</code><code>"Books:"</code> <code>+ gson.toJson(list));</code>
<code> </code><code>List<Book> listJsonBooks = gson.fromJson(gson.toJson(list),</code>
<code> </code><code>new</code> <code>TypeToken<List<Book>>() {</code>
<code> </code><code>}.getType());</code>
<code> </code><code>for</code> <code>(Book book : listJsonBooks) {</code>
<code> </code><code>System.out.println(</code><code>"Name:"</code> <code>+ book.getBookName() + </code><code>"Author:"</code>
<code> </code><code>+ book.getAuthor());</code>
<code>Books:[{</code><code>"BookName"</code><code>:</code><code>"明朝那些事"</code><code>,</code><code>"Author"</code><code>:</code><code>"當年明月"</code><code>},{</code><code>"BookName"</code><code>:</code><code>"盜墓筆記"</code><code>,</code><code>"Author"</code><code>:</code><code>"南派三叔"</code><code>},{</code><code>"BookName"</code><code>:</code><code>"鬼吹燈"</code><code>,</code><code>"Author"</code><code>:</code><code>"天下霸唱"</code><code>}]</code>
<code>Name:明朝那些事Author:當年明月</code>
<code>Name:盜墓筆記Author:南派三叔</code>
<code>Name:鬼吹燈Author:天下霸唱</code>
List<Map<String,String>>解析:
<code> </code><code>List<Map<String, String>> listMaps = </code><code>new</code> <code>ArrayList<Map<String,</code>
<code> </code><code>String>>();</code>
<code> </code><code>Map<String, String> map1 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>map1.put(</code><code>"Name"</code><code>, </code><code>"FlyElephant"</code><code>);</code>
<code> </code><code>map1.put(</code><code>"Address"</code><code>, </code><code>"上地"</code><code>);</code>
<code> </code><code>Map<String, String> map2 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>map2.put(</code><code>"Name"</code><code>, </code><code>"中山郎"</code><code>);</code>
<code> </code><code>map2.put(</code><code>"Address"</code><code>, </code><code>"北京"</code><code>);</code>
<code> </code><code>map2.put(</code><code>"Age"</code><code>, </code><code>"25"</code><code>);</code>
<code> </code><code>listMaps.add(map1);</code>
<code> </code><code>listMaps.add(map2);</code>
<code> </code><code>System.out.println(</code><code>"Map:"</code><code>+gson.toJson(listMaps));</code>
<code> </code><code>listMaps=gson.fromJson(gson.toJson(listMaps),</code><code>new</code>
<code> </code><code>TypeToken<List<Map<String,String>>>(){}.getType());</code>
<code> </code><code>for</code> <code>(Map<String, String> map : listMaps) {</code>
<code> </code><code>System.out.println(</code><code>"Name:"</code><code>+map.get(</code><code>"Name"</code><code>)+</code><code>"--Address:"</code><code>+map.get(</code><code>"Address"</code><code>));</code>
<code>Map:[{</code><code>"Address"</code><code>:</code><code>"上地"</code><code>,</code><code>"Name"</code><code>:</code><code>"FlyElephant"</code><code>},{</code><code>"Address"</code><code>:</code><code>"北京"</code><code>,</code><code>"Age"</code><code>:</code><code>"25"</code><code>,</code><code>"Name"</code><code>:</code><code>"中山郎"</code><code>}]</code>
<code>Name:FlyElephant--Address:上地</code>
<code>Name:中山郎--Address:北京</code>
List<Book>和Map<String>一起解析:
23
24
25
26
27
28
29
30
31
32
<code> </code><code>Map<String, String> map = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>map.put(</code><code>"List"</code><code>, gson.toJson(list));</code>
<code> </code><code>map.put(</code><code>"Info"</code><code>, </code><code>"上地"</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"混合使用:"</code><code>+gson.toJson(map));</code>
<code> </code><code>map = gson.fromJson(gson.toJson(map),</code>
<code> </code><code>new</code> <code>TypeToken<Map<String, String>>() {</code>
<code> </code><code>System.out.println(</code><code>"List:"</code> <code>+ map.get(</code><code>"List"</code><code>) + </code><code>"--Info:"</code><code>+map.get(</code><code>"Info"</code><code>));</code>
<code> </code><code>listJsonBooks= gson.fromJson(map.get(</code><code>"List"</code><code>),</code>
<code>混合使用:{</code><code>"List"</code><code>:</code><code>"[{\"BookName\":\"明朝那些事\",\"Author\":\"當年明月\"},{\"BookName\":\"盜墓筆記\",\"Author\":\"南派三叔\"},{\"BookName\":\"鬼吹燈\",\"Author\":\"天下霸唱\"}]"</code><code>,</code><code>"Info"</code><code>:</code><code>"上地"</code><code>}</code>
<code>List:[{</code><code>"BookName"</code><code>:</code><code>"明朝那些事"</code><code>,</code><code>"Author"</code><code>:</code><code>"當年明月"</code><code>},{</code><code>"BookName"</code><code>:</code><code>"盜墓筆記"</code><code>,</code><code>"Author"</code><code>:</code><code>"南派三叔"</code><code>},{</code><code>"BookName"</code><code>:</code><code>"鬼吹燈"</code><code>,</code><code>"Author"</code><code>:</code><code>"天下霸唱"</code><code>}]--Info:上地</code>
本文轉自Fly_Elephant部落格園部落格,原文連結:http://www.cnblogs.com/xiaofeixiang/p/4084476.html,如需轉載請自行聯系原作者