數據存儲(三)--JSON數據處理

    JSON是一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性,從而可以在不同平臺間進行數據交換。JSON採用兼容性很高的文本格式,同時也具備類似於C語言體系的行爲。JSON可以將Java對象轉成json格式的字符串,可以將json字符串轉換成Java。比XML更輕量級,Json使用起來比較輕便和簡單。JSON數據格式,在Android中被廣泛運用於客戶端和服務器通信,在網絡數據傳輸與解析時非常方便。

JSONObject--這是系統中有關JSON定義的基本單元,其包含一對兒(Key/Value)數值。
JSONArray--它代表一組有序的數值。將其轉換爲String輸出(toString)所表現的形式是用方括號包裹,數值以逗號”,”分隔(例如:[value1,value2,value3]
JSONStringer--這個類可以幫助快速和便捷的創建JSONtext。其最大的優點在於可以減少由於格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規則(syntaxrules)創建JSON text。每個JSONStringer實體只能對應創建一個JSON text。
JSONTokener--json解析類

JSONException--json中用到的異常 


下面以數據存儲(二)中的Book對象用Json格式轉爲String

public static String ObjectToJsonString(List<Book> books) throws JSONException
	{
		JSONStringer stringer = new JSONStringer();
		stringer.object();
		stringer.key("books");
		stringer.array();
		for(int i=0;i<books.size();i++)
		{
			stringer.object();
			stringer.key("book:name").value(books.get(i).getName());
			stringer.key("book:id").value(books.get(i).getId());
			stringer.key("book:price").value(books.get(i).getPrice());
			stringer.key("book:publisher").value(books.get(i).getPublisher());
			stringer.key("book:count").value(books.get(i).getCount());
			stringer.endObject();
		}
		stringer.endArray();
		stringer.endObject();
		return stringer.toString();
	}

String 轉爲Book對象

public static List<Book> jsonStringToObject(String str) throws JSONException
	{
		List<Book> books = new ArrayList<Book>();
		JSONTokener jsonTokener = new JSONTokener(str);
		JSONObject jsonObject = (JSONObject) jsonTokener.nextValue();
		JSONArray array =jsonObject.getJSONArray("books");
		for(int i =0;i<array.length();i++)
		{
			Book book = new Book();
			JSONObject temp = ((JSONObject) array.get(i));
			book.setName(temp.getString("book:name"));
			book.setId(temp.getString("book:id"));
			book.setPrice(temp.getString("book:price"));
			book.setPublisher(temp.getString("book:publisher"));
			book.setCount(temp.optInt("book:count"));
			books.add(book);
		}
		return books;
	}
注:

getXXX()可以將要獲取的鍵的值轉換爲指定的類型,如果無法轉換或沒有值則拋出JSONException 
optXXX()也是將要獲取的鍵的值轉換爲指定的類型,無法轉換或沒有值時返回用戶提供或這默認提供的值


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章