FastJson
目录
FastJson
新建一个SpringBoot项目
pom.xml
一、JavaBean与JSON数据相互转换
LoginController
FastJsonApplication启动类
编辑二、FastJson的@JSONField注解
Log实体类
TestLog测试类
三、FastJson对JSON数据的增、删、改、查
TestCrud
FastJson
- 1、JSON使用手册:JSON 教程 | 菜鸟教程 (runoob.com)
- 2、FastJson官方文档:Quick Start CN · alibaba/fastjson Wiki (github.com)
- 3、
- JSON(JavaScript Object Notation, JavaScript 对象标记法),是一种轻量级的数据交换格式。
- 对于一个前后端分离的SpringBoot项目而言,前端需要的是以“键:值”结构保存的JSON数据,后端需要的是JavaBean。所以出现了两种JSON解析库,把它们转来转去,以便前后端进行数据交流:
- 1、Spring Boot内置的Jackson(适合场景复杂、业务量大的项目)
- 2、阿里巴巴开发的FastJson(适合数据量小、并发量小的项目)
- FastJson是JSON解析库,用于转换JavaBean和JSON数据
- 序列化(将Java对象转换为JSON字符串)
反序列化(将JSON字符串转换为Java对象)
String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}", VO.class); //反序列化 //VO:与JSON数据对应的实体类- @
JSONField注解:
- 当你需要更精确地控制Java对象的字段在序列化和反序列化过程中的行为时,可以使用
@JSONField注解@JSONField注解可以用于声明类、属性或方法该注解可以让人重新定制序列化规则- 增删改查:
- FastJSON将JSON数据分成“对象”和“数组”两种形式,
- 把对象节点封装成JSONObject类,
- 把数组节点封装成JSONArray类,
- 然后利用这两个类对JSON数据进行增、删、改查操作
新建一个SpringBoot项目
项目结构:

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.study</groupId><artifactId>fastJson</artifactId><version>0.0.1-SNAPSHOT</version><name>fastJson</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--添加FastJSON依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version></dependency><!--使用@Test注解--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
一、JavaBean与JSON数据相互转换
LoginController
- 接收前端发来的JSON数据,返回JSON登录结果
package com.study.fastJson.controller;import com.alibaba.fastjson.JSON;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;/*** 接收前端发来的JSON数据,返回JSON登录结果*/
@RestController
public class LoginController {@RequestMapping("/login")public String login(@RequestBody String json){//将请求体中的字符串以JSON格式读取并转换为Map键值对象Map loginDate=JSON.parseObject(json,Map.class);//读取JSON中的账号String username=loginDate.get("username").toString();//读取JSON中的密码String password=loginDate.get("password").toString();HashMap<String, String> result = new HashMap<>();//返回的响应码String code="";//返回的响应信息String message="";if("mr".equals(username) && "123456".equals(password)){code="200";message="登录成功";}else{code="500";message="账号或密码错误";}//将响应码和响应信息保存到result响应结果中result.put("code",code);result.put("message",message);//将键值对象转换为以"键:值"结构保存的JSON数据并返回return JSON.toJSONString(result);}
}
FastJsonApplication启动类
package com.study.fastJson;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class FastJsonApplication {public static void main(String[] args) {SpringApplication.run(FastJsonApplication.class, args);}}
启动启动类,使用postman进行测试

二、FastJson的@JSONField注解
Log实体类
@JSONField注解的几个重要属性:
- name
- serialize
- format
- ordinal
package com.study.fastJson.entity;import com.alibaba.fastjson.annotation.JSONField;import java.util.Date;/*** @JSONField注解的各种常见用法*/
public class Log {//ordinal用于定义不同属性被转换后的JSON数据中的排列顺序,值越大越靠后@JSONField(ordinal = 0,name="code")//为该属性定义别名"code"private String id;@JSONField(ordinal = 1,serialize = false)//该属性不会被序列化,即不显示public String message;@JSONField(ordinal = 2,format = "yyyy-MM-dd HH:mm:ss")//定义该属性序列化时的日期格式public Date create;public Log() {}public Log(String message, Date create, String id) {this.message = message;this.create = create;this.id = id;}//Getter(),Setter()方法省略
}
TestLog测试类
package com.study.fastJson.entity;import com.alibaba.fastjson.JSON;
import org.junit.Test;import java.util.Date;public class TestLog {/*** @JSONField(name="code")* 定义属性的别名,以别名使用该属性*/@Testpublic void testName(){Log log = new Log();log.setId("404");System.out.println(JSON.toJSONString(log));}/*** @JSONField(format = "yyyy-MM-dd HH:mm:ss")* 当Log对象被转换为JSON数据时,会自动按照@JSONField注解定义的日期格式进行转换*/@Testpublic void testDateFormat(){Log log = new Log();log.create=new Date();System.out.println(JSON.toJSONString(log));}/*** @JSONField(serialize = false)* id属性不会被序列化*/@Testpublic void testSerialize(){Log log = new Log();log.setId("404");log.message="找不到资源";System.out.println(JSON.toJSONString(log));}/*** @JSONField(ordinal = 0)* ordinal用于定义不同属性被转换后的JSON数据中的排列顺序,值越大越靠后*/@Testpublic void testOrder(){Log log = new Log("找不到资源",new Date(),"404");System.out.println(JSON.toJSONString(log));}
}
三、FastJson对JSON数据的增、删、改、查
TestCrud
package com.study.fastJson;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;/*** 使用JSONObject类和JSONArray类对JSON数据进行增删改查操作*/
public class TestCrud {/*** 查询数据* 使用get()方法查询*/@Testpublic void getJson(){String json="{\"name\":\"张三\",\"age\":25,\"qq\":[\"123456789\",\"987654321\"],"+"\"scores\":{\"chinese\":90,\"math\":85}}";//获取以"键:值"结构保存的JSON数据的对象节点JSONObject root= JSON.parseObject(json);//查询指定字段对应的值String name=root.getString("name");int age=root.getIntValue("age");System.out.println("姓名:"+name+",年龄:"+age);//获取JSON数组中的值JSONArray arr=root.getJSONArray("qq");String firstQQ=arr.getString(0);System.out.println(firstQQ);//获取JSON子节点中的数据JSONObject scores=root.getJSONObject("scores");int math=scores.getIntValue("math");System.out.println("数学成绩为:"+math);}/*** 增加数据* 对象节点使用put()节点增加,数组节点使用add()方法增加*/@Testpublic void addJson(){String json="{\"name\":\"张三\",\"age\":25,\"qq\":[\"123456789\",\"987654321\"],"+"\"scores\":{\"chinese\":90,\"math\":85}}";//获取以"键:值"结构保存的JSON数据的对象节点JSONObject root= JSON.parseObject(json);root.put("sex","男");root.getJSONArray("qq").add("999999");root.getJSONObject("scores").put("english",92);System.out.println(root.toJSONString());}/*** 修改数据* 对象节点使用put()方法修改,数组节点使用set()方法修改*/@Testpublic void updateJson(){String json="{\"name\":\"张三\",\"age\":25,\"qq\":[\"123456789\",\"987654321\"],"+"\"scores\":{\"chinese\":90,\"math\":85}}";//获取以"键:值"结构保存的JSON数据的对象节点JSONObject root= JSON.parseObject(json);root.put("name","李四");//名字改成李四root.getJSONArray("qq").set(1,"000000");//将第二个qq号改成000000root.getJSONObject("scores").put("math",70);//数学成绩改成70System.out.println(root.toJSONString());}/*** 删除数据* 对象节点和数组节点都使用remove()方法删除*/@Testpublic void removeJson(){String json="{\"name\":\"张三\",\"age\":25,\"qq\":[\"123456789\",\"987654321\"],"+"\"scores\":{\"chinese\":90,\"math\":85}}";//获取以"键:值"结构保存的JSON数据的对象节点JSONObject root= JSON.parseObject(json);root.remove("age");//删除年龄字段root.getJSONArray("qq").remove(0);//删除第一个qq号root.getJSONObject("scores").remove("chinese");//删除语文成绩System.out.println(root.toJSONString());}
}
相关文章:
FastJson
目录 FastJson 新建一个SpringBoot项目 pom.xml 一、JavaBean与JSON数据相互转换 LoginController FastJsonApplication启动类 编辑二、FastJson的JSONField注解 Log实体类 TestLog测试类 三、FastJson对JSON数据的增、删、改、查 TestCrud FastJson 1、JSON使用手册…...
Web3设计风格和APP设计风格
Web3设计风格和传统APP设计风格在视觉和交互设计上有一些显著的区别。这些差异主要源于Web3技术和理念的独特性,以及它们在用户体验和界面设计中的具体应用。以下是Web3设计风格与传统APP设计风格的主要区别。北京木奇移动技术有限公司,专业的软件外包开…...
使用React和GraphQL进行CRUD:完整教程与示例
在本教程中,我们将向您展示如何使用GraphQL和React实现简单的端到端CRUD操作。我们将介绍使用React Hooks读取和修改数据的简单示例。我们还将演示如何使用Apollo Client实现身份验证、错误处理、缓存和乐观UI。 什么是React? React是一个用于构建用户…...
matplotlib 动态显示训练过程中的数据和模型的决策边界
文章目录 Github官网文档简介动态显示训练过程中的数据和模型的决策边界安装源码 Github https://github.com/matplotlib/matplotlib 官网 https://matplotlib.org/stable/ 文档 https://matplotlib.org/stable/api/index.html 简介 matplotlib 是 Python 中最常用的绘图…...
【学术小白成长之路】02三方演化博弈(基于复制动态方程)期望与复制动态方程
从本专栏开始,笔者正式研究演化博弈分析,其中涉及到双方演化博弈分析,三方演化博弈分析,复杂网络博弈分析等等。 先阅读了大量相关的博弈分析的文献,总结了现有的研究常用的研究流程,针对每个流程进行拆解。…...
短剧看剧系统投流版系统搭建,前端uni-app
目录 前言: 一、短剧看剧系统常规款短剧系统和投流版的区别? 二、后端体系 1.管理端: 2.代理投流端 三、功能区别 总结: 前言: 23年上半年共上新微短剧481部,相较于2022年全年上新的454部࿰…...
最新的ffmepg.js前端VUE3实现视频、音频裁剪上传功能
package.json "dependencies": {"ffmpeg/ffmpeg": "^0.12.10","ffmpeg/util": "^0.12.1" }vue3组件代码 根据需要更改 <script setup lang"ts"> import { FFmpeg } from ffmpeg/ffmpeg; import { fetchF…...
“Apache Kylin 实战指南:从安装到高级优化的全面教程
Apache Kylin是一个开源的分布式分析引擎,它提供了在Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力,支持超大规模数据的亚秒级查询。以下是Kylin的入门教程,帮助您快速上手并使用这个强大的工具。 1. 安装Kylin Apache Kylin的安装是一个关键步骤,它要求您具备一…...
【iOS】内存泄漏检查及原因分析
目录 为什么要检测内存泄漏?什么是内存泄漏?内存泄漏排查方法1. 使用Zombie Objects2. 静态分析3. 动态分析方法定位修改Leaks界面分析Call Tree的四个选项: 内存泄漏原因分析1. Leaked Memory:应用程序未引用的、不能再次使用或释…...
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
前言:在Java编程中,深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是两个非常重要的概念。它们涉及到对象在内存中的复制方式,对于理解对象的引用、内存管理以及数据安全都至关重要。 ✨✨✨这里是秋…...
Docker 进入指定容器内部(以Mysql为例)
文章目录 一、启动容器二、查看容器是否启动三、进入容器内部 一、启动容器 这个就不多说了 直接docker run… 二、查看容器是否启动 查看正在运行的容器 docker ps查看所有的容器 docker ps -a结果如下图所示: 三、进入容器内部 通过CONTAINER ID进入到容器…...
计算机网络-数制转换与子网划分
目录 一、了解数制 1、计算机的数制 2、二进制 3、八进制 4、十进制 5、十六进制 二、数制转换 1、二进制转十进制 2、八进制转十进制 3、十六进制转十进制 4、十进制转二进制 5、十进制转八进制 6、十进制转十六进制 三、子网划分 1、IP地址定义 2、IP的两种协…...
【ssh命令】ssh登录远程服务器
命令格式:ssh 用户名主机IP # 使用非默认端口: -p 端口号 ssh changxianrui192.168.100.100 -p 1022 # 使用默认端口 22 ssh changxianrui192.168.100.100 然后输入密码,就可以登录进去了。...
【区块链】truffle测试
配置区块链网络 启动Ganache软件 使用VScode打开项目的wordspace 配置对外访问的RPC接口为7545,配置项目的truffle-config.js实现与新建Workspace的连接。 创建项目 创建一个新的目录 mkdir MetaCoin cd MetaCoin下载metacoin盒子 truffle unbox metacoincontra…...
【AIGC调研系列】chatTTS与GPT-SoVITS的对比优劣势
ChatTTS和GPT-SoVITS都是在文本转语音(TTS)领域的重要开源项目,但它们各自有不同的优势和劣势。 ChatTTS 优点: 多语言支持:ChatTTS支持中英文,并且能够生成高质量、自然流畅的对话语音[4][10][13]。细粒…...
LLVM Cpu0 新后端10
想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…...
k8s面试题大全,保姆级的攻略哦(二)
目录 三十六、pod的定义中有个command和args参数,这两个参数不会和docker镜像的entrypointc冲突吗? 三十七、标签及标签选择器是什么,如何使用? 三十八、service是如何与pod关联的? 三十九、service的域名解析格式…...
Mysql:通过一张表里的父子级,递归查询并且分组分级
递归函数WITH RECURSIVE语法 WITH RECURSIVE cte_name (column_list) AS (SELECT initial_query_resultUNION [ALL]SELECT recursive_queryFROM cte_nameWHERE condition ) SELECT * FROM cte_name; WITH RECURSIVE 关键字:表示要使用递归查询的方式处理数据。 c…...
数据结构之排序算法
目录 1. 插入排序 1.1.1 直接插入排序代码实现 1.1.2 直接插入排序的特性总结 1.2.1 希尔排序的实现 1.2.2 希尔排序的特性总结 2. 选择排序 2.1.1 选择排序 2.1.2 选择排序特性 2.2.1 堆排序 2.2.2 堆排序特性 3. 交换排序 3.1.1 冒泡排序 3.1.2 冒泡排序的特性 …...
移动安全赋能化工能源行业智慧转型
随着我国能源化工企业的不断发展,化工厂中经常存在火灾爆炸的危险,特别是生产场所,约有80%以上生产场所区域存在爆炸性物质。而目前我国化工危险场所移动通信设备的普及率高,但是对移动通信设备的安全防护却有所忽视,包…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
