admin 发表于 2019-7-30 17:07:20

主流JSON库对比

前言随着REST API的流行,json(JavaScript Object Notation)作为一种轻量级的数据交互格式,具备易于人阅读与编写同时易于机器生存与解析等特点,逐渐得到广泛的应用。与此同时,json库反序列化特性导致的远程代码执行漏洞层出不穷,破坏力十足且影响面广泛。本文将从Gson、Jackson和Fastjson这三个主流JSON库的性能、安全等方面进行对比分析,供大家参考、取舍。JSON介绍JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等主流JSON库目前主流JSON库包括以下三个:GSON、JACKSON、FASTJSONGSON:Google公司发布的一个开源Java 库,主要用途为序列化Java对象为JSON字符串、反序列化JSON字符串成Java对象。Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化。同时每个方法都提供了重载方法地址:https://github.com/google/gsonJACKSON:       Jackson是一款知名的JSON库,不仅支持流式处理json,还支持数据绑定,实现JSON字符串和Java对象的相互转换。Spring Boot默认自带jackson,也可以通过配置来修改。Jackson核心模块由三部分组成:1.      jackson-core:核心包,提供基于流模式解析的相关API,包括JsonPaser和JsonGenerator。2.      jackson-annotations:注解包,提供标准注解功能。3.      jackson-databind:数据绑定包,实现了对象和JSON之间的转换,这个包依赖上面两个包地址:https://github.com/FasterXML/jacksonFASTJSON:       Fastjson是Alibaba开源的一款高性能JSON库。采用“假定有序快速匹配”的算法,号称Java语言中最快的JSON库。Fastjson接口简单易用,广泛应用在缓存序列化、协议交互、Web输出、Android客户端等场景。Fastjson提供两个主要接口toJsonString和parseObject来分别实现序列化和反序列化项目:https://github.com/alibaba/fastjson性能分析Fastjson官方性能对比:https://github.com/eishay/jvm-serializers/wiki当处理数据量较小时gson的性能优势明显,样本数较大值fastjson明显领先,Jackson性能与fastjson大体相当
建议:综合分析,总结如下      性能:处理数据较小时建议选用gson,数据量较大时:Jackson与fastjson性能相当,建议选择jackson      安全性:gson风险最小,Jackson历史漏洞较多,但漏洞通报机制较好,其不存在全局的机制性问题,安全风险可控。Fastjson漏洞通报机制很差,且从架构上存在全局性机制问题,不建议使用。
页: [1]
查看完整版本: 主流JSON库对比