我们在开发项目时候经常会遇到要解析数组 对象等等,现在已经有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,jsonObject2.getString("name"),jsonObject2.getBigInteger("age")); TestPerson t = JSON.parSEObject(str,TestPerson.class); System.out.printf("name:%s,t.getName(),t.getAge()); Map m = JSON.parSEObject(str,Map.class); System.out.println(m.toString()); System.out.printf("name:%s,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,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,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,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,j2.getString("name"),j2.getBigInteger("age"));
结果是:
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