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%以上生产场所区域存在爆炸性物质。而目前我国化工危险场所移动通信设备的普及率高,但是对移动通信设备的安全防护却有所忽视,包…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
