天天看点

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,如需转载请自行联系原作者

继续阅读