fastjson常用使用方法
我們在開發專案時候經常會遇到要解析陣列 物件等等,現在已經有fastjson是目前最快的,就嘗試下把常用的方法總結下:
在說fastjson之前先說下 序列化和反序列化:
1.Java序列化與反序列化
Java序列化是指把Java物件轉換為位元組序列的過程;而Java反序列化是指把位元組序列恢復為Java物件的過程。
2.為什麼需要序列化與反序列化
我們知道,當兩個程序進行遠端通訊時,可以相互發送各種型別的資料,包括文字、圖片、音訊、視訊等, 而這些資料都會以二進位制序列的形式在網路上傳送。那麼當兩個Java程序進行通訊時,能否實現程序間的物件傳送呢?答案是可以的。如何做到呢?這就需要Java序列化與反序列化了。換句話說,一方面,傳送方需要把這個Java物件轉換為位元組序列,然後在網路上傳送;另一方面,接收方需要從位元組序列中恢復出Java物件。
當我們明晰了為什麼需要Java序列化和反序列化後,我們很自然地會想Java序列化的好處。其好處一是實現了資料的持久化,通過序列化可以把資料永久地儲存到硬碟上(通常存放在檔案裡),二是,利用序列化實現遠端通訊,即在網路上傳送物件的位元組序列。
我們之前在物件流 java.io.ObjectOutputStream:用到了物件流,在這個流中就使用的序列化和反序列化;
它的writeObject(Object obj)方法可以對引數指定的obj物件進行序列化,把得到的位元組序列寫到一個目標輸出流中。
java.io.ObjectInputStream:表示物件輸入流
它的readObject()方法源輸入流中讀取位元組序列,再把它們反序列化成為一個物件,並將其返回。
說明:為了正確讀取資料,完成反序列化,必須保證向物件輸出流寫物件的順序與從物件輸入流中讀物件的順序一致。
總結:
1)Java序列化就是把物件轉換成位元組序列,而Java反序列化就是把位元組序列還原成Java物件。
2)採用Java序列化與反序列化技術,一是可以實現資料的持久化,在MVC模式中很是有用;二是可以物件資料的遠端通訊。
有了上面的簡單瞭解,下面介紹fastjson:
常用的方法:
public static final Object parse(String text); // 把JSON文字parse為JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文字parse成JSONObject
public static final T parseObject(String text, Class clazz); // 把JSON文字parse為JavaBean
public static final JSONArray parseArray(String text); // 把JSON文字parse成JSONArray
public static final List parseArray(String text, Class clazz); //把JSON文字parse成JavaBean集合
public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文字
public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化為帶格式JSON文字
public static final Object toJSON(Object javaObject); 將JavaBean轉換為JSONObject或者JSONArray。
demo:
System.out.println("----------------------------——————————————————————————");
String str = "{\"name\":\"趙六\",\"age\":59}";
JSONObject jsonObject = (JSONObject) JSON.parse(str);
System.out.printf("name:%s,age:%d\n",jsonObject.getString("name"),jsonObject.getBigInteger("age"));
JSONObject jsonObject2 = JSON.parseObject(str);
System.out.printf("name:%s,age:%d\n",jsonObject2.getString("name"),jsonObject2.getBigInteger("age"));
TestPerson t = JSON.parseObject(str, TestPerson.class);
System.out.printf("name:%s,age:%d\n",t.getName(),t.getAge());
Map m = JSON.parseObject(str,Map.class);
System.out.println(m.toString());
System.out.printf("name:%s,age:%d\n",m.get("name"),m.get("age"));
String str2 = "[{\"name\":\"小徐\",\"age\":90},{\"name\":\"老李\",\"age\":15}]";
JSONArray jarray = (JSONArray)JSON.parse(str2);
for(int i = 0;i<jarray.size();i++){
JSONObject jobt = jarray.getJSONObject(i);
System.out.printf("---name:%s,age:%d\n",jobt.getString("name"),jobt.getBigInteger("age"));
}
JSONArray jsonarray = JSON.parseArray(str2);
for(int i = 0;i<jsonarray.size();i++){
JSONObject jobt = jsonarray.getJSONObject(i);
System.out.printf("name:%s,age:%d\n",jobt.getString("name"),jobt.getBigInteger("age"));
}
System.out.println();
System.out.println();
String str3 = "[{\"name\":\"小徐2\",\"age\":92},{\"name\":\"老李2\",\"age\":17}]";
List<TestPerson> list = JSON.parseArray(str3, TestPerson.class);
for(int i = 0; i < list.size(); i++){
TestPerson tp = list.get(i);
System.out.printf("name:%s,age:%d\n",tp.getName(),tp.getAge());
}
TestPerson tp = new TestPerson(34,"韓梅梅");
String parseStr = JSON.toJSONString(tp);
System.out.println(parseStr);
String parseStr2 = JSON.toJSONString(tp,true);
System.out.println(parseStr2);
JSONObject j2 = (JSONObject) JSON.toJSON(tp);
System.out.printf("---name:%s,age:%d\n",j2.getString("name"),j2.getBigInteger("age"));
結果是:
name:趙六,age:59
name:趙六,age:59
name:趙六,age:59
{name=趙六, age=59}
name:趙六,age:59
---name:小徐,age:90
---name:老李,age:15
name:小徐,age:90
name:老李,age:15
name:小徐2,age:92
name:老李2,age:17
{"age":34,"name":"韓梅梅"}
{
"age":34,
"name":"韓梅梅"
}
---name:韓梅梅,age:34