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語言精粹》也是這貨寫的,⊙﹏⊙~說多了,進入正題吧:java

JSON與XML

可讀性: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的格式是固定的,就意味着你們能夠按照規則本身解析,不過爲了提升開發效率,有些工具提供了簡單的功能供你們使用,好比說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:天下霸唱

  週末在博客園看文章的都是上進的孩子,你們週末愉快~

相關文章
相關標籤/搜索