天天看點

Android資料解析-JSON解析

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"}

Android資料解析-JSON解析

數組是值(value)的有序集合。一個數組以“[”(左中括号)開始,“]”(右中括号)結束。值之間使用“,”(逗号)分隔,例如:[{"Name":"FlyElephant"},{"Name":"中山 郎"}]

Android資料解析-JSON解析

值(value)可以是雙引号括起來的字元串(string)、數值(number)、true、false、null、對象(object)或者數組(array)。這些結構可以嵌套.

Android資料解析-JSON解析

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&lt;String&gt;和類共同使用

<code>Gson gson = </code><code>new</code> <code>Gson();</code>

<code> </code><code>List&lt;String&gt; list = </code><code>new</code> <code>ArrayList&lt;String&gt;();</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&lt;List&lt;String&gt;&gt;() {</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&lt;Book&gt;解析:

<code>    </code><code>List&lt;Book&gt; list = </code><code>new</code> <code>ArrayList&lt;Book&gt;();</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&lt;Book&gt; listJsonBooks = gson.fromJson(gson.toJson(list),</code>

<code>            </code><code>new</code> <code>TypeToken&lt;List&lt;Book&gt;&gt;() {</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&lt;Map&lt;String,String&gt;&gt;解析:

<code>    </code><code>List&lt;Map&lt;String, String&gt;&gt; listMaps = </code><code>new</code> <code>ArrayList&lt;Map&lt;String,</code>

<code>    </code><code>String&gt;&gt;();</code>

<code>    </code><code>Map&lt;String, String&gt; map1 = </code><code>new</code> <code>HashMap&lt;String, String&gt;();</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&lt;String, String&gt; map2 = </code><code>new</code> <code>HashMap&lt;String, String&gt;();</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&lt;List&lt;Map&lt;String,String&gt;&gt;&gt;(){}.getType());</code>

<code>    </code><code>for</code> <code>(Map&lt;String, String&gt; 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&lt;Book&gt;和Map&lt;String&gt;一起解析:

23

24

25

26

27

28

29

30

31

32

<code>    </code><code>Map&lt;String, String&gt; map = </code><code>new</code> <code>HashMap&lt;String, String&gt;();</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&lt;Map&lt;String, String&gt;&gt;() {</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,如需轉載請自行聯系原作者

繼續閱讀