Android fastJson和Gson
阿新 • • 發佈:2019-01-12
在開發Android的過程中,如果我們經常與伺服器打交道,更新資料等等,那麼json必然是個好的資料格式,但是有了json我們要解析它,使用原生的解析也可以,但是很不高效,所以這裡介紹兩種json資料解析的方式,一種是FastJSon ,這個是阿里巴巴出的,號稱最快的解析速度。第二種使我們偉大的Google提供的Gson 來解析json,兩個解析json都很方便,而且都很強大,在我使用中,基本上都滿足了我的需求,下面簡單就接受一下,我們的使用方法。
JSON的定義 1.JSON和XML的資料可讀性基本相同 2.JSON和XML同樣擁有豐富的解析手段 3.JSON相對於XML來講,資料的體積小 4.JSON與JavaScript的互動更加方便 5.JSON對資料的描述性比XML較差 6.JSON的速度要遠遠快於XML android2.3提供的json解析類 JSONObject:可以看作是一個json物件,這是系統中有關JSON定義的基本單元,其包含一對兒(Key/Value)數值。它對外部(External: 應用toString()方法輸出的數值)呼叫的響應體現為一個標準的字串(例如:{"JSON": "Hello, World"},最外被大括號包裹,其中的Key和Value被冒號":"分隔)。其對於內部(Internal)行為的操作格式略微,例如:初始化一個JSONObject例項,引用內部的put()方法新增數值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之間是以逗號","分隔。Value的型別包括:Boolean、JSONArray、JSONObject、Number、String或者預設值JSONObject.NULL object 。 JSONStringer:json文字構建類 ,根據官方的解釋,這個類可以幫助快速和便捷的建立JSON text。其最大的優點在於可以減少由於 格式的錯誤導致程式異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)建立JSON text。每個JSONStringer實體只能對應建立一個JSON text。。其最大的優點在於可以減少由於格式的錯誤導致程式異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)建立JSON text。每個JSONStringer實體只能對應建立一個JSON text。 JSONArray:它代表一組有序的數值。將其轉換為String輸出(toString)所表現的形式是用方括號包裹,數值以逗號”,”分隔(例如: [value1,value2,value3],大家可以親自利用簡短的程式碼更加直觀的瞭解其格式)。這個類的內部同樣具有查詢行為, get()和opt()兩種方法都可以通過index索引返回指定的數值,put()方法用來新增或者替換數值。同樣這個類的value型別可以包括:Boolean、JSONArray、JSONObject、Number、String或者預設值JSONObject.NULL object。 JSONTokener:json解析類 JSONException:json中用到的異常 鍵值對轉換成json數值 // 假設現在要建立這樣一個json文字 // { // "phone" : ["12345678", "87654321"], // 陣列 // "name" : "crazyzm", // 字串 // "age" : 100, // 數值 // "address" : { "country" : "china", "province" : "jiangsu" }, // 物件 // "married" : false // 布林值 // } try { // 首先最外層是{},是建立一個物件 JSONObject person = new JSONObject(); // 第一個鍵phone的值是陣列,所以需要建立陣列物件 JSONArray phone = new JSONArray(); phone.put("12345678").put("87654321"); person.put("phone", phone); person.put("name", "crazyzm"); person.put("age", 100); // 鍵address的值是物件,所以又要建立一個物件 JSONObject address = new JSONObject(); address.put("country", "china"); address.put("province", "llsf"); person.put("address", address); person.put("married", false); return person.toString(); } catch (JSONException ex) { // 鍵為null或使用json不支援的數字格式(NaN, infinities) throw new RuntimeException(ex); } getType和optType api的使用 getType可以將要獲取的鍵的值轉換為指定的型別,如果無法轉換或沒有值則丟擲JSONException optType也是將要獲取的鍵的值轉換為指定的型別,無法轉換或沒有值時返回使用者提供或這預設提供的值 try { // 所有使用的物件都是用上面建立的物件 // 將第一個電話號碼轉換為數值和將名字轉換為數值 phone.getLong(0); person.getLong("name"); // 會拋異常,因為名字無法轉換為long phone.optLong(0); // 程式碼內建的預設值 phone.optLong(0, 1000); // 使用者提供的預設值 person.optLong("name"); person.optLong("name", 1000); // 不像上面那樣拋異常,而是返回1000 } catch (JSONException ex) { // 異常處理程式碼 }
1 public static final Object parse(String text); // 把JSON文字parse為JSONObject或者JSONArray 2 public static final JSONObject parseObject(String text); // 把JSON文字parse成JSONObject 3 public static final T parseObject(String text, Class clazz); // 把JSON文字parse為JavaBean 4 public static final JSONArray parseArray(String text); // 把JSON文字parse成JSONArray 5 public static final List parseArray(String text, Class clazz); //把JSON文字parse成JavaBean集合 6 public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文字 7 public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化為帶格式的JSON文字 8 public static final Object toJSON(Object javaObject); 將JavaBean轉換為JSONObject或者JSONArray。
例子