JAVA:Fastjson 序列化和反序列化的技术指南

news2024/10/8 17:14:13

请关注微信公众号:拾荒的小海螺
博客地址:http://lsk-ww.cn/

1、简述

在 Java 领域,JSON 作为轻量级数据交换格式广泛使用。对于高性能、高并发场景,选择一个高效的 JSON 序列化和反序列化库非常重要。Fastjson 是由阿里巴巴开发的开源 JSON 处理库,以其卓越的性能和简洁的 API 设计深受开发者喜爱。本文将详细介绍如何使用 Fastjson 进行 JSON 数据处理,并展示多个应用场景的实例。

在这里插入图片描述

2、依赖引入

Fastjson 相比其他 JSON 库有如下特点:

  • 高性能:Fastjson 对序列化和反序列化的处理速度非常快,特别是在大规模数据量场景中性能表现优异。
  • 灵活性:支持自定义序列化和反序列化策略,方便处理复杂对象。
  • 易用性:提供了简洁的 API,快速上手,适合不同层次的开发者。
  • 安全性改进:在早期版本中,Fastjson 曾有安全问题,但这些问题在最新版本中已得到修复。

要在 Spring Boot 或其他 Java 项目中使用 Fastjson,首先需要在 pom.xml 中引入 Maven 依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

3、基础用法

3.1 序列化:将 Java 对象转换为 JSON 字符串

Fastjson 提供了非常简单的 API 用于将 Java 对象转换为 JSON 字符串。以下是一个基础的序列化示例:

import com.alibaba.fastjson.JSON;

public class FastjsonSerializationExample {

    public static void main(String[] args) {
        // 创建对象
        Person person = new Person("Alice", 28, new Address("Shanghai", "200000"));

        // 使用 Fastjson 进行序列化
        String jsonString = JSON.toJSONString(person);
        System.out.println("Serialized JSON: " + jsonString);
    }
}

class Person {
    private String name;
    private int age;
    private Address address;

    public Person(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    // Getters 和 Setters 省略
}

class Address {
    private String city;
    private String zip;

    public Address(String city, String zip) {
        this.city = city;
        this.zip = zip;
    }

    // Getters 和 Setters 省略
}

输出结果:

Serialized JSON: {"address":{"city":"Shanghai","zip":"200000"},"age":28,"name":"Alice"}
3.2 反序列化:将 JSON 字符串转换为 Java 对象

Fastjson 也提供了简洁的 API 用于将 JSON 字符串转换为 Java 对象。以下是一个反序列化的示例:

import com.alibaba.fastjson.JSON;

public class FastjsonDeserializationExample {

    public static void main(String[] args) {
        // JSON 字符串
        String jsonString = "{\"address\":{\"city\":\"Shanghai\",\"zip\":\"200000\"},\"age\":28,\"name\":\"Alice\"}";

        // 使用 Fastjson 进行反序列化
        Person person = JSON.parseObject(jsonString, Person.class);
        System.out.println("Deserialized Person: " + person.getName() + ", " + person.getAge() + ", " + person.getAddress().getCity());
    }
}

输出结果:

Deserialized Person: Alice, 28, Shanghai
3.3 处理复杂数据结构

Fastjson 可以轻松处理复杂的 JSON 结构,包括嵌套对象和列表。以下是一个处理嵌套对象和列表的示例:

import com.alibaba.fastjson.JSON;
import java.util.List;
import java.util.ArrayList;

public class FastjsonNestedExample {

    public static void main(String[] args) {
        // 创建对象
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 28, new Address("Shanghai", "200000")));
        people.add(new Person("Bob", 35, new Address("Beijing", "100000")));

        // 序列化对象列表
        String jsonString = JSON.toJSONString(people);
        System.out.println("Serialized JSON List: " + jsonString);

        // 反序列化对象列表
        List<Person> deserializedPeople = JSON.parseArray(jsonString, Person.class);
        deserializedPeople.forEach(person -> 
            System.out.println("Deserialized Person: " + person.getName() + ", " + person.getAddress().getCity()));
    }
}

输出结果:

Serialized JSON List: [{"address":{"city":"Shanghai","zip":"200000"},"age":28,"name":"Alice"},{"address":{"city":"Beijing","zip":"100000"},"age":35,"name":"Bob"}]
Deserialized Person: Alice, Shanghai
Deserialized Person: Bob, Beijing
3.4 自定义序列化和反序列化

Fastjson 提供了强大的注解功能,允许对序列化和反序列化过程进行自定义控制。通过 @JSONField 注解,你可以灵活配置字段名称、格式化方式等。

import com.alibaba.fastjson.annotation.JSONField;

class Person {
    @JSONField(name = "full_name")
    private String name;
    
    @JSONField(name = "years_old")
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters 和 Setters 省略
}

4、应用场景

  • 高并发、高性能需求的系统:Fastjson 以高性能著称,适合电商平台、大数据系统等需要处理大量 JSON 数据的场景。
  • 灵活处理复杂 JSON 数据:在需要处理嵌套对象、数组、复杂对象映射等场景时,Fastjson 提供了非常灵活的处理能力。
  • 自定义序列化需求:通过 @JSONField 注解,可以轻松实现复杂的自定义序列化需求。

Fastjson 在性能上表现出色,特别是在大数据量的序列化/反序列化中,其速度相对 Jackson 和 Gson 更加快速。在一些性能测试中,Fastjson 在对象结构复杂或数组较大时仍能保持较好的处理效率。

5、总结

Fastjson 是一款强大且高效的 JSON 库,特别适用于对性能要求较高的场景。它提供了简洁的 API 以及强大的自定义序列化支持,适合处理复杂的 JSON 数据结构。在电商平台、数据交换接口和高性能系统中,Fastjson 是一个优秀的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成长之路:我的技术布道之路回顾

成长之路&#xff1a;从零开始的技术布道之路回顾-哔哩哔哩 大家好&#xff0c;我是许泽宇&#xff0c;今天想跟大家分享一下我在过去一年的成长和收获。这一年对我来说是满满的一年&#xff0c;我在技术布道的道路上取得了一些小小的成绩&#xff0c;也收获了很多宝贵的经验。…

精选四款免费电脑录屏软件,轻松搞定屏幕录制

大家好&#xff0c;我是一个喜欢找各种办公软件的人&#xff0c;今天我要来聊聊咱们日常工作中一个超实用的小工具——电脑录屏软件。作为一个天天和电脑打交道的办公室文员&#xff0c;我算是尝遍了市面上几款热门的录屏神器&#xff0c;它们各有各的绝活&#xff0c;让我在工…

unix系统中的system函数

一、前言 本文将介绍unix系统中的system函数&#xff0c;包括system函数的作用以及使用方法。 二、system函数 简单来说&#xff0c;system函数用于创建一个子进程并让子进程运行新的程序。其原理是依次执行如下操作&#xff1a; fork() --> execl() --> waitpid() 函…

在QT中将Widget提升为自定义的Widget后,无法设置Widget的背景颜色问题解决方法

一、问题 在Qt中将QWidget组件提升为自定义的QWidget后&#xff0c;Widget设置的样式失效&#xff0c;例如设置背景颜色为白色失效。 二、解决方法 将已经提升的QWidget实例对象&#xff0c;脱离父窗体的样式&#xff0c;然后再重新设置自己的样式。

AP8505固定5V输出5V0.2A,SOP7/DIP7非隔离开关电源IC

AP8505基于高压同步整流架构&#xff0c;集成PFM控制器以及500V高可靠性MOSFET&#xff0c;用于外部元器件极精简的小功率非隔离开关电源。AP8505无线门铃芯片内置500V高压启动&#xff0c;实现系统快速启动、超低待机功能。5V非隔离无线门铃芯片AP8505提供了完整的智能化保护功…

基于Python的爬虫设计与数据分析—计算机毕业设计源码37836

目 录 摘要 1 绪论 1.1课题背景 1.2研究目的及意义 1.3爬虫技术 1.4django框架介绍 2 1.5论文结构与章节安排 3 2 基于Python的爬虫设计与数据分析分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据流程 5 2.2.2业务流程 5 2.3 系统功能分析 5 2.3.1 功能性分析 6 2…

线性代数入门:打开数学的另一扇门

线性代数入门&#xff1a;打开数学的另一扇门 线性代数&#xff0c;作为数学的一个重要分支&#xff0c;它不仅是许多科学和工程领域的核心工具&#xff0c;也是理解现代科技的关键。这篇文章将带你走进线性代数的世界&#xff0c;为你揭开这门学科的神秘面纱。 什么是线性代…

【RAG论文精读1】RAG原始论文-针对知识密集型NLP任务的检索增强生成

目录 一、简介一句话简介作者、引用数、时间论文地址开源代码地址 二、摘要三、引言四、整体架构&#xff08;用一个例子来阐明&#xff09;场景例子&#xff1a;核心点&#xff1a; 五、方法 &#xff08;架构各部分详解&#xff09;5.1 模型1. RAG-Sequence Model2. RAG-Toke…

【面试官】谈谈你对顺序栈和链式栈的认识

思维导图 栈&#xff08;Stack&#xff09;是一种数据结构&#xff0c;遵循后进先出&#xff08;LIFO&#xff09;原则。在java中Stack在java.util.Stack中。 一.常用方法的使用 1. push(E item)&#xff1a;把元素压入栈顶。 代码示例&#xff1a; import java.util.Stack;…

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档回复:20241007 1 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务&#xff0c;就是尝试利用这个协议&#xff0c;还原一个简化后的网络连接场景。 在本问题中&#xff0c;计算机分为两大类&#xff1a;服务机&#x…

【AI知识点】反向传播(Backpropagation)

反向传播&#xff08;Backpropagation&#xff09; 是训练神经网络的核心算法&#xff0c;它通过反向逐层计算损失函数对每个权重的梯度&#xff0c;来反向逐层更新网络的权重&#xff0c;从而最小化损失函数。 一、反向传播的基本概念 1. 前向传播&#xff08;Forward Propag…

安装DNS

在 CentOS 7 上安装并配置 BIND 以实现 DNS 的正向和反向解析可以按照以下步骤进行&#xff1a; 安装 BIND 打开终端并运行以下命令来安装 BIND 及其工具&#xff1a; yum install bind bind-utils -y配置 BIND 编辑主配置文件&#xff1a; 使用文本编辑器打开 BIND 的主配…

双十一购物清单:这五款爆款科技好物绝不能错过!买到就是赚到!

随着一年一度的双十一购物狂欢节即将拉开帷幕&#xff0c;各大电商平台纷纷推出了一系列优惠活动&#xff0c;吸引着无数消费者的目光。对于科技爱好者而言&#xff0c;这无疑是一个绝佳的机会&#xff0c;能够以优惠的价格购得心仪的电子产品和智能设备。然而&#xff0c;在琳…

HTTPS介绍 --- 超详细保姆级知识讲解

目录 一. 认识HTTPS 二. 使用HTTPS加密的重要性 三. HTTPS的工作流程 四. 常见的加密方式 4.1 对称加密 4.2 非对称加密 五. 数据摘要 && 数据指纹 5.1 数据摘要 5.2 数据签名 六. HTTPS加密过程探究 6.1 方案一&#xff1a;只使用对…

晶体规格书及匹配测试

一、晶体参数介绍 晶体的电气规格相对比较简单,如下: 我们逐一看看每个参数, FL就是晶体的振动频率,这个晶体是24.576MHz的。 CL就是负载电容,决定了晶体频率是否准确,包括外接的实际电容、芯片的等效电容以及PCB走线的寄生电容等,核心参数。 Frequency Tolerance是…

骨传导耳机哪个牌子好?五大精选抢手骨传导耳机分享!

在数字化时代背景下&#xff0c;音乐和音频内容已经成为人们日常生活不可或缺的一部分。随着技术的发展&#xff0c;骨传导耳机凭借其独特的传输方式和健康优势&#xff0c;迅速赢得了市场和消费者的青睐。不同于传统耳机通过空气传导声音&#xff0c;骨传导耳机通过骨骼直接传…

《独自骑行与群骑之旅:探索不同的自由与氛围》

在快节奏的现代生活中&#xff0c;骑行作为一种既环保又健康的出行方式&#xff0c;越来越受到人们的青睐。然而&#xff0c;选择一个人骑车还是加入一群人的行列&#xff0c;这不仅仅是一种出行方式的选择&#xff0c;更是一种生活态度和价值观的体现。本文将探讨这两种骑行方…

【读书笔记·VLSI电路设计方法解密】问题1:什么是芯片

芯片&#xff08;集成电路或IC&#xff09;是在半导体材料的薄基底表面上制造的微型电子电路。在功能上&#xff0c;芯片是一种硬件组件&#xff0c;能够执行某些特定的功能。例如&#xff0c;一个简单的芯片可能被设计用来执行逻辑NOR&#xff08;或非&#xff09;的简单功能&…

如何在VSCode上运行C/C++代码

诸神缄默不语-个人CSDN博文目录 我是Win10&#xff0c;其他系统仅供参考。 文章目录 1. 下载所需插件2. 安装编译器3. 不借助编辑器的cpp代码执行3. 建立VSCode cpp项目3.1 c_cpp_properties.json3.2 settings.json3.3 tasks.json 4. 运行C代码参考资料 1. 下载所需插件 2. 安…

记一次N5105 NAS功耗测量

记一次N5105 NAS功耗测量 一、设备说明 HA500机器&#xff0c;N5105CPU&#xff0c;32GB内存。unraid最新6.12.13系统硬盘有一根500G M2硬盘和一个512G sata接口ssd硬盘&#xff0c;用于组成zfs raid 1&#xff0c;作为cache盘位。另外有三个4T机械硬盘&#xff0c;组成21的形…