Java常用JSON库FastJson,Gson,Jackson,Json-lib性能及特点比较,常用工具方法
Java常用JSON库性能及特点比较,常用工具方法
- 四种库序列化,反序列化性能对比
- 四种库对空值属性的处理
- 测试
- 结果
- 结论
- 四种库的工具类
- FastJsonUtil
- GsonUtil
- JacksonUtil
- JsonLibUtil
四种库序列化,反序列化性能对比
- JMH做的序列化,反序列化的性能测试
- 10W次测试结果如下
序列化性能:FastJson>Jackson>Gson>Jsonlib
反序列化性能:Gson>Jackson>FastJson>Jsonlib
四种库对空值属性的处理
测试
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;/*** json测试对象** @author fan*/
@Setter
@Getter
@AllArgsConstructor
public class Student {private String name;private String password;private Integer age;private String[] hobbies;private Student deskMate;
}
import com.ultra.util.FastJsonUtil;
import com.ultra.util.GsonUtil;
import com.ultra.util.JacksonUtil;
import com.ultra.util.JsonLibUtil;
import org.junit.Test;/*** json测试工具** @author fan*/
public class JsonUtilTest {@Testpublic void testJson() {Student student = new Student("AA", null, null, null, null);System.out.println("FastJson: " + FastJsonUtil.getJson(student));System.out.println("Gson: " + GsonUtil.bean2Json(student));System.out.println("Jackson: " + JacksonUtil.bean2Json(student));System.out.println("JsonLib: " + JsonLibUtil.bean2Json(student));}
}
结果
FastJson: {"name":"AA"}
Gson: {"name":"AA"}
Jackson: {"name":"AA","password":null,"age":null,"hobbies":null,"deskMate":null}
JsonLib: {"age":0,"deskMate":null,"hobbies":[],"name":"AA","password":""}
结论
- FastJson:忽略空值的属性,空集合的属性
- Gson:忽略空值的属性,空集合的属性
- Jackson:空值的属性和空集合的属性值是null
- JsonLib:基本数据类型包装类会初始化值,String属性会初始化"";其他空值属性的值是null,空集合的属性值是[]
四种库的工具类
FastJsonUtil
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;import java.util.List;/*** @author admin*/
public class FastJsonUtil {/*** json转对象** @param jsonString json* @param requestType <T>类型的class对象* @param <T> 对象类型* @return 对象*/public static <T> T json2Bean(String jsonString, Class<T> requestType) {return JSON.parseObject(jsonString, requestType);}/*** json转对象集合** @param jsonString json* @return 对象集合*/public static <T> List<T> json2Beans(String jsonString, Class<T> requestType) {return JSON.parseArray(jsonString, requestType);}/*** 对象转json** @param javaObject 对象* @return json*/public static String bean2Json(Object javaObject) {return JSONObject.toJSONString(javaObject);}/*** 集合转json** @param list 集合或者数组* @return json串*/public static String beans2Json(Object list) {return JSONObject.toJSONString(list);}
}
GsonUtil
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;import java.util.List;public class GsonUtil {private static final Gson GSON = new GsonBuilder().create();/*** 对象、集合转json** @param obj 对象* @return json*/public static String bean2Json(Object obj) {return GSON.toJson(obj);}/*** json转对象** @param jsonString json* @param objClass 对象类型* @param <T> 对象类型* @return 对象*/public static <T> T json2Bean(String jsonString, Class<T> objClass) {return GSON.fromJson(jsonString, objClass);}/*** json转集合* TODO 返回的对象不是List<T>,而是List<com.google.gson.internal.LinkedTreeMap>,强转是会报错;待优化** @param jsonString json* @param <T> 对象类型* @return 对象集合*/public static <T> List<T> json2Beans(String jsonString) {return GSON.fromJson(jsonString, new TypeToken<List<T>>() {}.getType());}}
JacksonUtil
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** @author admin*/
public class JacksonUtil {private static final Logger logger = LoggerFactory.getLogger(JacksonUtil.class);private static final ObjectMapper MAPPER = new ObjectMapper();/*** 对象、集合转json** @param obj 对象* @return json*/public static String bean2Json(Object obj) {try {return MAPPER.writeValueAsString(obj);} catch (JsonProcessingException e) {logger.error("", e);return null;}}/*** json转对象** @param jsonString json* @param objClass 对象的Class* @param <T> 对象类型* @return 对象*/public static <T> T json2Bean(String jsonString, Class<T> objClass) {try {return MAPPER.readValue(jsonString, objClass);} catch (IOException e) {logger.error("", e);return null;}}/*** json转集合** @param jsonString json* @param objClass 对象的Class* @param <T> 对象类型* @return 对象集合*/public static <T> List<T> json2Beans(String jsonString, Class<T> objClass) {try {JavaType javaType = getCollectionType(objClass);return MAPPER.readValue(jsonString, javaType);} catch (IOException e) {logger.error("", e);return null;}}/*** 获取泛型的Collection Type** @param elementClass 元素类* @return JavaType Java类型*/private static JavaType getCollectionType(Class<?> elementClass) {return MAPPER.getTypeFactory().constructParametricType(ArrayList.class, elementClass);}
}
JsonLibUtil
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;import java.util.ArrayList;
import java.util.List;/*** 注意:bean2Json需要无参构造器** @author admin*/
public class JsonLibUtil {/*** 对象转json** @param obj 对象* @return json*/public static String bean2Json(Object obj) {JSONObject jsonObject = JSONObject.fromObject(obj);return jsonObject.toString();}/*** 集合转json** @param list 集合* @return json*/public static String beans2Json(Object list) {JSONArray jsonArray = JSONArray.fromObject(list);return jsonArray.toString();}/*** json转对象** @param jsonString json* @param objClass 对象类型* @param <T> 对象类型* @return 对象*/public static <T> T json2Bean(String jsonString, Class<T> objClass) {return (T) JSONObject.toBean(JSONObject.fromObject(jsonString), objClass);}/*** json转集合** @param jsonString json* @param objClass 对象类型* @param <T> 对象类型* @return 集合*/public static <T> List<T> json2Beans(String jsonString, Class<T> objClass) {JSONArray jsonArray = JSONArray.fromObject(jsonString);return new ArrayList<T>(JSONArray.toCollection(jsonArray, objClass));}
}
Java常用JSON库FastJson,Gson,Jackson,Json-lib性能及特点比较,常用工具方法相关推荐
- Json的FastJson与Jackson
FastJson 需要引入 fastjson-1.2.40.jar包 FastJson的介绍 JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson ...
- Struts2.0第三章(文件上传、ajax开发、json、Fastjson、Jackson、注解开发)
Struts2.0文件上传: 浏览器端注意事项: 1.表单提交方式method = post: 2.表单中必须有一个<input type="file" name = &qu ...
- pythonos pathjson_python进阶05 常用问题库(1)json os os.path模块
python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...
- 【Java】【序列化】gson实现json美化
GsonBuilder builder = new GsonBuilder();builder.setPrettyPrinting();gson = builder.create();//如果是对象, ...
- 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...
- 1. 初识Jackson -- 世界上最好的JSON库
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- 初识Jackson——世界上最好的JSON库
一个工程仅需一个JSON库 Java的JSON库,你至少应该用过/听过这三种:Jackson.Gson.Fastjson.一个独立的工程,按照依赖最少原则,本应该only one JSON库是足矣的. ...
- 常用json框架介绍和Jackson返回结果处理
常用json框架介绍和Jackson返回结果处理 简介:介绍常用json框架和注解的使用,自定义返回json结构和格式 1.常用框架 阿里 fastjson,谷歌gson等 J ...
- Json学习总结(9)——放弃FastJson!Jackson的功能原来如此之牛
什么是Jackson Jackson是比较主流的基于Java的JSON类库,可用于Json和XML与JavaBean之间的序列化和反序列化.没看错,Jackson也可以处理JavaBean与XML之间 ...
- Java - Jackson JSON Java Parser API
文章目录 概述 依赖 Jackson JSON示例 基础数据 JSON转换为Java对象 Jackson JSON –将JSON转换为Map 概述 Jackson JSON Java Parser非常 ...
最新文章
- AC日记——友好城市 洛谷 P2782
- 每天一道LeetCode-----找到给定数组中第三大的值
- SQL Server 2008 R2 安装
- 蒙特.卡罗方法求解圆周率近似值原理与Python实现
- 软件测试过程中的度量与分析
- Enterprise Library Policy Injection Application Block 之一: PIAB Overview
- CenterNet++ | CenterNet携手CornerNet终于杀回来了,实时高精度检测值得拥有!
- 替代传统按键方案 单通道感应TTP223E-BA6 TTP223E-CA6 TTP223E-HA6 单按键触摸检测IC
- 利用THINKPHP框架开发的自定义表单及数据字典模板
- Can I insert a countdown timer in a Powerpoint presentation?
- Java可以做什么工作
- 排列怎么用计算机计算公式,数学排列组合公式计算器
- c语言if函数的作用是什么意思,if是什么意思_if,意思_词汇大全意思全集
- NCRE-嵌入式系统开发工程师-操作系统知识整理
- IDEA 打包项目时xml,yml,properties等文件不复制
- unity软粒子softparticle仿真实现
- A005-软件结构-从前后台到调度器
- 算法研究NO7.数字滤波
- Android ORM框架GreenDao用法
- 条码查询接口,商品条码和药品条码查询