fastjson实现原理是什么?Fastjson如何解析json数据?

阳光 2021-07-28 18:19:16 java常见问答 10366

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实现原理是什么?Fastjson如何解析json数据?.JPG

Fastjson具有速度快、使用广泛、使用简单等特点,并且可以操作任何Java对象,可以实现Java Bean和JSON字符串的互相转换。最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

java编程培训哪里学?学java有用吗?

json格式怎么转换?JS对象与json字符串格式如何转换?

java接口如何定义?java接口能干嘛?