1. 程式人生 > >Android fastJson和Gson

Android fastJson和Gson

在開發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。

例子