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語言精粹》也是這貨寫的,⊙﹏⊙~說多了,進入正題吧:java
可讀性:JSON和XML的可讀性不相上下,JSON格式經常使用的符號是逗號,小括號,冒號,中括號,引號五種,比較簡潔,XML規範的標籤形式,都很易讀易懂。web
可擴展性:XML天生有很好的擴展性,JSON也有,沒有什麼是XML能擴展,而JSON卻不能擴展。不過JSON在Javascript主場做戰,能夠存儲Javascript複合對象,有着xml不可比擬的優點。json
編碼難度:XML有豐富的編碼工具,好比Dom4j、JDom等,JSON也有提供的工具。無工具的狀況下,寫JSON會比XML稍微快一點(想對我而言),xml文檔要多不少結構上的字符。數組
JSON數據格式:網絡
鍵值對的形式:{"Name":"FlyElephant"}工具
數組是值(value)的有序集合。一個數組以「[」(左中括號)開始,「]」(右中括號)結束。值之間使用「,」(逗號)分隔,例如:[{"Name":"FlyElephant"},{"Name":"中山 郎"}]測試
值(value)能夠是雙引號括起來的字符串(string)、數值(number)、true、false、null、對象(object)或者數組(array)。這些結構能夠嵌套.google
Json的格式是固定的,就意味着你們能夠按照規則本身解析,不過爲了提升開發效率,有些工具提供了簡單的功能供你們使用,好比說json-lib,GSON,既然是搞Android,就使用Gsonj解析,Gson下載地址https://code.google.com/p/google-gson/downloads/list?can=1&q=,下載最新的那個便可~以後添加到本身項目中~編碼
無論是開發仍是測試都離不開類對象,因此這個時候先建了一個Book類:spa
public class Book { public Book(String bookName, String author) { super(); BookName = bookName; Author = author; } private String BookName; private String Author; public String getBookName() { return BookName; } public void setBookName(String bookName) { BookName = bookName; } public String getAuthor() { return Author; } public void setAuthor(String author) { Author = author; } }
轉換類對象:
Book book=new Book("明朝那些事", "當年明月"); Gson gson=new Gson(); //生成JSON調用toJSON System.out.println("Book: " + gson.toJson(book)); //解析JSON調用fromJSON Book jsonBook=gson.fromJson(gson.toJson(book), Book.class); System.out.println("Name:"+jsonBook.getBookName()+"--Author:"+jsonBook.getAuthor());
結果以下:
Book: {"BookName":"明朝那些事","Author":"當年明月"} Name:明朝那些事--Author:當年明月
List<String>和類共同使用
Gson gson = new Gson(); List<String> list = new ArrayList<String>(); list.add("北京"); list.add("上海"); list.add("廣州"); list.add("深圳"); System.out.println("IT城市:" + gson.toJson(list)); //注意這裏的第二個參數 list = gson.fromJson(gson.toJson(list), new TypeToken<List<String>>() { }.getType()); for (String string : list) { System.out.println(string); } Book book=new Book(gson.toJson(list), "當年明月"); System.out.println("Book: " + gson.toJson(book)); Book jsonBook=gson.fromJson(gson.toJson(book), Book.class); System.out.println("Name:"+jsonBook.getBookName()+"--Author:"+jsonBook.getAuthor());
結果以下:
IT城市:["北京","上海","廣州","深圳"] 北京 上海 廣州 深圳 Book: {"BookName":"[\"北京\",\"上海\",\"廣州\",\"深圳\"]","Author":"當年明月"} Name:["北京","上海","廣州","深圳"]--Author:當年明月
List<Book>解析:
Gson gson = new Gson(); List<Book> list = new ArrayList<Book>(); Book book1 = new Book("明朝那些事", "當年明月"); Book book2 = new Book("盜墓筆記", "南派三叔"); Book book3 = new Book("鬼吹燈", "天下霸唱"); list.add(book1); list.add(book2); list.add(book3); System.out.println("Books:" + gson.toJson(list)); List<Book> listJsonBooks = gson.fromJson(gson.toJson(list), new TypeToken<List<Book>>() { }.getType()); for (Book book : listJsonBooks) { System.out.println("Name:" + book.getBookName() + "Author:" + book.getAuthor()); }
結果以下:
Books:[{"BookName":"明朝那些事","Author":"當年明月"},{"BookName":"盜墓筆記","Author":"南派三叔"},{"BookName":"鬼吹燈","Author":"天下霸唱"}] Name:明朝那些事Author:當年明月 Name:盜墓筆記Author:南派三叔 Name:鬼吹燈Author:天下霸唱
List<Map<String,String>>解析:
Gson gson = new Gson(); List<Map<String, String>> listMaps = new ArrayList<Map<String, String>>(); Map<String, String> map1 = new HashMap<String, String>(); map1.put("Name", "FlyElephant"); map1.put("Address", "上地"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("Name", "中山郎"); map2.put("Address", "北京"); map2.put("Age", "25"); listMaps.add(map1); listMaps.add(map2); System.out.println("Map:"+gson.toJson(listMaps)); listMaps=gson.fromJson(gson.toJson(listMaps),new TypeToken<List<Map<String,String>>>(){}.getType()); for (Map<String, String> map : listMaps) { System.out.println("Name:"+map.get("Name")+"--Address:"+map.get("Address")); }
結果以下:
Map:[{"Address":"上地","Name":"FlyElephant"},{"Address":"北京","Age":"25","Name":"中山郎"}] Name:FlyElephant--Address:上地 Name:中山郎--Address:北京
List<Book>和Map<String>一塊兒解析:
Gson gson = new Gson(); List<Book> list = new ArrayList<Book>(); Book book1 = new Book("明朝那些事", "當年明月"); Book book2 = new Book("盜墓筆記", "南派三叔"); Book book3 = new Book("鬼吹燈", "天下霸唱"); list.add(book1); list.add(book2); list.add(book3); System.out.println("Books:" + gson.toJson(list)); List<Book> listJsonBooks = gson.fromJson(gson.toJson(list), new TypeToken<List<Book>>() { }.getType()); for (Book book : listJsonBooks) { System.out.println("Name:" + book.getBookName() + "Author:" + book.getAuthor()); } Map<String, String> map = new HashMap<String, String>(); map.put("List", gson.toJson(list)); map.put("Info", "上地"); System.out.println("混合使用:"+gson.toJson(map)); map = gson.fromJson(gson.toJson(map), new TypeToken<Map<String, String>>() { }.getType()); System.out.println("List:" + map.get("List") + "--Info:"+map.get("Info")); listJsonBooks= gson.fromJson(map.get("List"), new TypeToken<List<Book>>() { }.getType()); for (Book book : listJsonBooks) { System.out.println("Name:" + book.getBookName() + "Author:" + book.getAuthor()); }
結果以下:
Books:[{"BookName":"明朝那些事","Author":"當年明月"},{"BookName":"盜墓筆記","Author":"南派三叔"},{"BookName":"鬼吹燈","Author":"天下霸唱"}] Name:明朝那些事Author:當年明月 Name:盜墓筆記Author:南派三叔 Name:鬼吹燈Author:天下霸唱 混合使用:{"List":"[{\"BookName\":\"明朝那些事\",\"Author\":\"當年明月\"},{\"BookName\":\"盜墓筆記\",\"Author\":\"南派三叔\"},{\"BookName\":\"鬼吹燈\",\"Author\":\"天下霸唱\"}]","Info":"上地"} List:[{"BookName":"明朝那些事","Author":"當年明月"},{"BookName":"盜墓筆記","Author":"南派三叔"},{"BookName":"鬼吹燈","Author":"天下霸唱"}]--Info:上地 Name:明朝那些事Author:當年明月 Name:盜墓筆記Author:南派三叔 Name:鬼吹燈Author:天下霸唱
週末在博客園看文章的都是上進的孩子,你們週末愉快~