1. 程式人生 > >第六篇:fastJson常用方法總結

第六篇:fastJson常用方法總結

 1、瞭解json

 json就是一串字串 只不過元素會使用特定的符號標註。
 {} 雙括號表示物件
 [] 中括號表示陣列
 "" 雙引號內是屬性或值
 : 冒號表示後者是前者的值(這個值可以是字串、數字、也可以是另一個數組或物件)
 所以 {"name": "Kobe"} 可以理解為是一個包含name為Kobe的物件
 而[{"name": "Michael"},{"name": "Kobe"}]就表示包含兩個物件的陣列

當前java的第三方json庫非常多,google的gson,alibaba的fastJson,jackson,微軟的也有一個,還有java自己的json ,查了下效率和受歡迎度,以後就選擇馬雲的fastJson作為常用的json解析和構建工具了

2、瞭解fastJson
(1)功能強大,支援JDK的各種型別,包括基本的JavaBean、Collection、Map、Date、Enum、泛型 
(2) 無依賴,不需要例外額外的jar,能夠直接跑在JDK上
(3)支援註解等等這些高階的特性還沒接觸到,不談
(4)幾個對比助於理解
 SerializeWriter:相當於StringBuffer
     JSONArray:相當於List<Object>
     JSONObject:相當於Map<String, Object>
(5)API入口類是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON類上的靜態方法直接完成

1 public static final Object parse(String text);                                     // 把JSON文字轉換成JSONObject或者JSONArray 
2 public static final JSONObject parseObject(String text);                  // 把JSON文字轉換成JSONObject 
3 public static final JSONArray parseArray(String text);                     // 把JSON文字轉換成JSONArray 
4 public static final <T> T parseObject(String text, Class<T> clazz);  // 把JSON文字轉換成JavaBean
5 public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文字轉換成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(Obiect javaObject);         //將JavaBean轉換為JSONObject或者JSONArray  
 
3、解析
  首先要明白一個規律,無論傳過來的jsonStr怎麼組裝,怎麼巢狀,都逃不了以下三種,形如[]的JSONArray,形如{}的JSONObject以及“:”連線的鍵值對,因此解析的第一步要先判斷是用parseObject還是parseArray方法(前5種),特別提醒如果直接用方法1,一般要強制轉換。前提是你知道傳過來的json字串的格式。第一步解析完之後需要用到下面兩類方法來呼叫:
 public JSONObject getJSONObject(int index);   //讀取物件
 public JSONObject getJSONObject(String key);   //讀取物件
 public JSONArray getJSONArray (int index);   //讀取陣列
 public JSONArray getJSONArray (String key);   //讀取陣列 
有時候需要最終取出資料,那麼解析到最後一層形如{a:b,c:d,e:f} 的時候就可以直接用
JSONObject裡的各種取資料的方法,比如隨便說幾個,getLongValue(),getString(),getInteger(),引數均為key
例:如下json字串解析str


    {
          "id": 1
          "type": "cycle",
         "attribute": {
             "center": "(10.4, 123.345)",
             "radius": 67.4
            }
    },
    {
        "id": 2,
        "type": "polygon",
        "attribute": [
            {
             "vertex": "(10.4,133.345)"
            },
             {
            "vertex": "(10.4,143.345)"
            }
        ]
    }

現在我要得到最後的 "vertex": "(10.4,143.345)"這條資料
首先,最外層是陣列
 JSONArray ja = JSON.parseArray(str);
ja這個json陣列內部是兩個物件,取出第二個(id為2的那個物件)
JSONObject jo = ja.getJSONObject(1) ;
jo這個json物件中有3個鍵值對,取出第三個,key為attribute的那個,取出後結果為陣列,so
JSONArray ja1 = jo.getJSONObject("attribute");
ja1這個json陣列內部有兩個物件,取出第二個
JSONObject jo1 = ja1.getJSONObject(1) ;
jo1就是 {"vertex": "(10.4,143.345)"}這個物件,現在裡面就1個鍵值對了,取出來就是了
String s = jo1.getString("vertex");
System.out.println(s);//結果為(10.4,143.345)

        這個是最基本的取值,其他的還有遍歷,用javaBean的暫時沒碰到,暫時也不去總結,至於構建,一般都是從list,map轉化,或者是在前臺js中,比如我的上一篇的ztree打包的資料,我就用js的 JSON.stringify(dataList)來打包成json格式的傳到後臺的

接下來還有java 中list,map,和json之間的轉換