Fastjson 可以操作任何 Java 对象,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。那fastjson实现原理是什么?下面来我们就来给大家讲解一下。
1.序列化:通过asm 获取对象上的属性的get方法集合,然后通过调用相应的方法拼装出json字符串。
2.反序列化:通过asm 获取对象上的属性的set方法集合,然后调用set方法集合,赋值到相应的属性。所有的parser基本上都需要做词法处理,json也不例外。fastjson词法处理的时候,使用了基于预测的优化算法。比如key之后,最大的可能是冒号":",value之后,可能是有两个,逗号","或者右括号"}"。
3.封装了ASM,直接操作java类文件,获取要序列化和反序列化的类的属性方法,get set 等。
4.实现了一个类似StringBuffer的可以append的对字符串操作的类。实现了Appendable接口。
SerializeWriter功能和StringBuffer类似。里面增加了ThreadLocal变量来存储char[]buf 数组,减少对内存的分配与回收。提供一些针对性的方法减少数组越界检查。
Fastjson如何解析json数据?
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class Demo { public static void main(String[] args) { String data = "{\"name\":\"zhangli\",\"age\":22,\"sex\":\"女\",\"skill\":[\"java\",\"python\",\"JavaScript\"],\"depts\":[{\"deptno\":11,\"dname\":\"Accounting\",\"loc\":\"中国\"},{\"deptno\":22,\"dname\":\"Maneager\",\"loc\":\"上海\"}]}"; // String转为json对象 JSONObject jsonObject = JSONObject.parseObject(data); //读取name String name = jsonObject.getString("name"); System.out.println("name: " + name); //取得skill数组 JSONArray skill = jsonObject.getJSONArray("skill"); for (int i = 0; i < skill.size(); i++) { System.out.println(skill.get(i)); } //depts json数组 JSONArray depts = jsonObject.getJSONArray("depts"); for (int i = 0; i < depts.size(); i++) { JSONObject temdpts = depts.getJSONObject(i); System.out.println("部门编号: " + temdpts.getString("deptno")); System.out.println("部门名称: " + temdpts.getString("dname")); System.out.println("部门位置: " + temdpts.getString("loc")); } } }
Fastjson具有速度快、使用广泛、使用简单等特点,并且可以操作任何Java对象,可以实现Java Bean和JSON字符串的互相转换。最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: