jackson、gson、fastjson和json-lib四种主流json解析框架对比
一、四种框架的介绍和对比
在Java中,Jackson、Gson、Fastjson和json-lib都是流行的JSON解析框架,它们各自有一些特点和优势。下面是对它们进行简要介绍和对比:
1.1 介绍
1) Jackson:
- Jackson是由FasterXML开发的一个高性能的JSON解析库,广泛用于Java应用程序中。
- 它提供了轻量级、快速、灵活的API,支持JSON和Java对象之间的双向转换。
- Jackson的性能较高,可以处理大型JSON数据流。
- Jackson可以与Spring框架集成得很好,并且在企业级应用中得到广泛应用。
2) Gson:
- Gson是Google开发的一个简单易用的JSON解析库,可以将JSON字符串转换为Java对象,也可以将Java对象转换为JSON字符串。
- Gson具有良好的文档和社区支持,易于学习和使用。
- 虽然Gson在速度上可能不如Jackson和Fastjson,但对于一般的JSON解析任务来说,性能足够好了。
3)Fastjson:
- Fastjson是阿里巴巴开发的一个高性能、功能丰富的JSON解析库。
- 它具有非常快的解析速度和序列化性能,在大规模数据处理场景下表现出色。
- Fastjson支持JSON和Java对象之间的高效转换,同时提供了丰富的功能选项和灵活性。
- 由于其高性能和稳定性,Fastjson在阿里巴巴和其他大型企业中被广泛使用。
4)json-lib:
- json-lib是一个比较老的JSON处理库,由于其开发已经停止,因此不推荐在新项目中使用。
- 它提供了一套简单易用的API,但相比于其他现代的JSON库,其性能和功能相对较差。
- json-lib支持Java对象到JSON的转换,以及JSON到Java对象的转换,但相对于其他库来说,它的性能不是很出众。
1.2 对比
● 性能:在性能方面,Fastjson通常被认为是最快的JSON解析库,其次是Jackson和Gson,json-lib的性能相对较低。
● API和功能:Jackson提供了非常灵活、强大的API,支持各种高级功能,例如树模型、数据绑定、注解等。Gson也提供了简单易用的API,但功能相对较少。Fastjson提供了丰富的功能和选项,但API可能相对复杂一些。json-lib在功能上相对较弱。
● 社区和支持:Jackson和Gson拥有广泛的社区支持和文档,使用者较多,问题容易获得解答。Fastjson由于其阿里巴巴的背景,在中国有较大的用户群体。json-lib的支持相对较弱,因为其开发已经停止。
● 使用场景:对于性能要求较高的场景,可以选择Fastjson。对于需要强大功能和灵活性的场景,Jackson是一个不错的选择。对于简单的JSON解析任务,Gson提供了简单易用的API。json-lib因为其开发已停止,不建议在新项目中使用。
二、四种框架使用示例
下面是编写一个简单的示例来演示使用Jackson、Gson、Fastjson和json-lib这四种主流JSON解析库的用法,并进行对比。
首先,引入pom依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>
</dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId>
</dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version>
</dependency>
然后,我们将定义一个简单的Java类User,表示一个用户:
public class User {private String name;private int age;// 无参构造函数(必须有)public User() {}public User(String name, int age) {this.name = name;this.age = age;}// getter和setter方法(必须有)public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}
接下来,分别编写使用Jackson、Gson、Fastjson和json-lib的代码来完成以下任务:
1. 将Java对象转换为JSON字符串;
2. 将JSON字符串转换为Java对象。
下面是完整的代码示例:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.alibaba.fastjson.JSON;
import net.sf.json.JSONObject;public class JsonLibrariesDemo {public static void main(String[] args) {User user = new User("John", 30);// 使用JacksonSystem.out.println("Using Jackson:");jacksonDemo(user);// 使用GsonSystem.out.println("Using Gson:");gsonDemo(user);// 使用FastjsonSystem.out.println("Using Fastjson:");fastjsonDemo(user);// 使用json-libSystem.out.println("Using json-lib:");jsonLibDemo(user);}private static void jacksonDemo(User user) {try {// 将Java对象转换为JSON字符串ObjectMapper objectMapper = new ObjectMapper();String json = objectMapper.writeValueAsString(user);System.out.println("Serialized JSON: " + json);// 将JSON字符串转换为Java对象User deserializedUser = objectMapper.readValue(json, User.class);System.out.println("Deserialized User: " + deserializedUser);} catch (Exception e) {e.printStackTrace();}}private static void gsonDemo(User user) {try {// 将Java对象转换为JSON字符串Gson gson = new Gson();String json = gson.toJson(user);System.out.println("Serialized JSON: " + json);// 将JSON字符串转换为Java对象User deserializedUser = gson.fromJson(json, User.class);System.out.println("Deserialized User: " + deserializedUser);} catch (Exception e) {e.printStackTrace();}}private static void fastjsonDemo(User user) {try {// 将Java对象转换为JSON字符串String json = JSON.toJSONString(user);System.out.println("Serialized JSON: " + json);// 将JSON字符串转换为Java对象User deserializedUser = JSON.parseObject(json, User.class);System.out.println("Deserialized User: " + deserializedUser);} catch (Exception e) {e.printStackTrace();}}private static void jsonLibDemo(User user) {try {// 将Java对象转换为JSON字符串JSONObject jsonObject = JSONObject.fromObject(user);String json = jsonObject.toString();System.out.println("Serialized JSON: " + json);// 将JSON字符串转换为Java对象User deserializedUser = (User) JSONObject.toBean(jsonObject, User.class);System.out.println("Deserialized User: " + deserializedUser);} catch (Exception e) {e.printStackTrace();}}
}
相关文章:
jackson、gson、fastjson和json-lib四种主流json解析框架对比
一、四种框架的介绍和对比 在Java中,Jackson、Gson、Fastjson和json-lib都是流行的JSON解析框架,它们各自有一些特点和优势。下面是对它们进行简要介绍和对比: 1.1 介绍 1) Jackson: Jackson是由FasterXML开发的一个高性能的J…...
已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法
今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况: 可以看到 userMapper 下有个红色的波浪警告,虽然代码没有任何问题,能正常运行,但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找,最终明白了原因…...
在jar里限制指定的包名才可调用(白名单)。
1. 在jar包中定义一个接口,例如 用于检查传入的hash值是否匹配预设的值。 2. 在调用接口的地方,获取当前应用的hash值。 3. 将当前应用的hash值与预设的值进行比较,如果匹配,则允许调用接口;否则,拒绝调用。…...
python 提取PDF文字
使用pdfplumber,不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…...
电气机械5G智能工厂数字孪生可视化平台,推进电气机械行业数字化转型
电气机械5G智能工厂数字孪生可视化平台,推进电气机械行业数字化转型。随着科技的不断发展,数字化转型已经成为各行各业发展的重要趋势。电气机械行业作为传统制造业的重要组成部分,也面临着数字化转型的挑战和机遇。为了更好地推进电气机械行…...
C# (WebApi)整合 Swagger
SpringBoot-整合Swagger_jboot整合swagger-CSDN博客 C# webapi 也可以整合Swagger webapi运行其实有个自带的HELP页面 但是如果觉得UI不好看,且没办法显示方法注释等不方便的操作,我们也可以整合Swagger 一、使用NuGet控制台安装Swagger 在菜单中选择…...
导入excel某些数值是0
目录 导入excel某些数值是0数据全部都是0原因解决 部分数据是0原因解决 导入excel某些数值是0 数据全部都是0 有一列“工单本月入库重量”全部的数据都是0 原因 展示的时候,展示的字段和内表需要展示的字段不一致,导致显示的是0。 解决 修改展示的字…...
wo-gradient-card是一款采用uniapp实现的透明辉光动画卡片
采用uniapp-vue3实现,透明辉光动画卡片,卡片内容包含标签、标题、副标题、图片 支持H5、微信小程序(其他小程序未测试过,可自行尝试) 可用于参考学习 可到插件市场下载尝试: https://ext.dcloud.net.cn/plu…...
Spark: a little summary
转眼写spark一年半了,从之前写机器学习组件、做olap到后面做图计算,一直都是用的spark,惭愧的是没太看过里面的源码。这篇文章的目的是总结一下Spark里面比较重要的point,重点部分会稍微看一下源代码,因为spark是跟cli…...
018—pandas 生成笛卡尔积排列组合合并多列字符串数据
思路: 本需求需要将给定的几列数据,生成一个排列组合形式的数据列,利用到 Pandas 多层索引生成的笛卡尔积的方法。 二、使用步骤 1.引入库 代码如下(示例): import pandas as pd2.读入数据 代码如下&…...
【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)
文章目录 四、链表理论五、哈希表理论五、栈和队列理论5.1 单调栈 六、二叉树理论6.1 树的定义6.2 二叉树的存储方式6.3 二叉树的遍历方式6.4 高度和深度 最近博主学习了算法与数据结构的一些视频,在这个文章做一些笔记和心得,本篇文章就写了一些基础算法…...
bugku3
前女友 md5 进去又是讴歌乱进的东西 源代码 看到code.txt,访问一下 <?php if(isset($_GET[v1]) && isset($_GET[v2]) && isset($_GET[v3])){$v1 $_GET[v1];$v2 $_GET[v2];$v3 $_GET[v3];if($v1 ! $v2 && md5($v1) md5($v2)){if(!strcmp($v3,…...
相机的白平衡
相机的白平衡是指相机根据拍摄环境的光源色温,调整图像中白色看起来应该是白色的功能。白平衡的设置对于确保图像中的颜色准确性非常重要,因为不同光源的色温会使白色看起来有不同的色调。 通常,相机提供了一些预设的白平衡模式,…...
刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现
刷题日记Day2 977 有序数组的平方209. 长度最小的子数组59. 螺旋矩阵 II 977 有序数组的平方 链接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组…...
Linux命令-chcon命令(修改对象(文件)的安全上下文)
说明 chcon命令 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用 --reference 选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于 /…...
【漏洞复现】大华DSS视频管理系统信息泄露漏洞
Nx01 产品简介 大华DSS数字监控系统是一个在通用安防视频监控系统基础上设计开发的系统,除了具有普通安防视频监控系统的实时监视、云台操作、录像回放、报警处理、设备治理等功能外,更注重用户使用的便利性。 Nx02 漏洞描述 大华DSS视频管理系统存在信…...
websocket了解下
websocket请求长啥样 GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ Sec-WebSocket-Version: 13 啥是websocket websocket是http的一种,服务器可以主动向客户端推送信息,…...
docker install private registry 【docker 安装 registry 仅证书认证】
预备条件: 安装docker 我们设定镜像仓库域名为registry01.dev.com 配置/etc/hosts 192.168.23.51 registry01.dev.com安装 registry #!/bin/bashreg_ip$1 reg_n$2 reg_port$3if [ $# -eq 0 ]; thenecho "Usage: $0 [reg_ip] [registry_name]"echo &q…...
JavaWeb——004Maven SpringBootWeb入门
一、Maven 1、什么是maven? 2、Maven的作用是什么?(3种) 1.1、方便的依赖管理 依赖管理:有了Maven,我们就不用再手动导入Jar包了,我们只需要在配置文件当中,简单描述一下项目所需要…...
数据结构与算法-常用排序算法
一、常用排序说明 当涉及排序算法时,理解每个算法的工作原理、时间复杂度和空间复杂度是至关重要的。下面对常用排序算法进行详细说明: 1、冒泡排序(Bubble Sort): 工作原理:比较相邻的元素并交换&am…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
