当前位置: 首页 > news >正文

java fastjson2 解析JSON用法解析

Fastjson2Fastjson 的升级版本,提供了更好的性能和扩展性,同时也在 API 和功能上做了很多改进。使用 Fastjson2 解析 JSON 数据非常简单,支持多种方式来解析 JSON 字符串、嵌套 JSON 对象和数组、以及转换成 Java 对象。下面详细介绍 Fastjson2 的常见 JSON 解析用法。

1. 引入 Fastjson2 依赖

在使用 Fastjson2 之前,确保项目中包含相应的依赖。

Maven 依赖
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.31</version> <!-- 使用最新版本 -->
</dependency>
Gradle 依赖
implementation 'com.alibaba.fastjson2:fastjson2:2.0.31'

2. JSON 解析

2.1 解析 JSON 字符串为 Java 对象

Fastjson2 使用 JSON.parseObject() 方法将 JSON 字符串转换为 Java 对象。

示例:将 JSON 字符串解析为 Java 对象
import com.alibaba.fastjson2.JSON;public class Fastjson2Example {public static void main(String[] args) {String jsonString = "{\"name\":\"John\",\"age\":25}";// 解析 JSON 字符串为 Java 对象Person person = JSON.parseObject(jsonString, Person.class);System.out.println(person.getName());  // 输出: JohnSystem.out.println(person.getAge());   // 输出: 25}
}class Person {private String name;private int age;// Getters and Setterspublic 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; }
}
2.2 解析嵌套的 JSON 对象

Fastjson2 可以直接解析嵌套的 JSON 对象。你可以通过 getJSONObject() 获取嵌套的 JSONObject,然后再继续解析它。

示例:解析嵌套的 JSON 对象
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;public class Fastjson2Example {public static void main(String[] args) {String jsonString = "{\"name\":\"John\",\"address\":{\"city\":\"Anytown\",\"street\":\"123 Main St\"}}";// 解析 JSON 字符串为 JSONObjectJSONObject jsonObject = JSON.parseObject(jsonString);// 获取嵌套的 JSON 对象 (address)JSONObject address = jsonObject.getJSONObject("address");String city = address.getString("city");String street = address.getString("street");System.out.println("City: " + city);      // 输出: AnytownSystem.out.println("Street: " + street);  // 输出: 123 Main St}
}
2.3 解析 JSON 数组

Fastjson2 也可以直接将 JSON 数组字符串解析为 JSONArray。你可以通过 parseArray()parseObject() 方法来处理数组。

示例:解析 JSON 数组
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;public class Fastjson2Example {public static void main(String[] args) {String jsonArrayString = "[{\"name\":\"John\",\"age\":25}, {\"name\":\"Jane\",\"age\":28}]";// 将 JSON 数组解析为 ListJSONArray jsonArray = JSON.parseArray(jsonArrayString);// 遍历 JSON 数组并解析每个对象for (int i = 0; i < jsonArray.size(); i++) {Person person = jsonArray.getObject(i, Person.class);System.out.println(person.getName() + " - " + person.getAge());}}
}
2.4 解析 JSON 字符串为 Map

如果你不需要将 JSON 解析为特定的 Java 对象,可以直接解析为 MapList

示例:将 JSON 解析为 Map
import com.alibaba.fastjson2.JSON;
import java.util.Map;public class Fastjson2Example {public static void main(String[] args) {String jsonString = "{\"name\":\"John\",\"age\":25}";// 将 JSON 解析为 MapMap<String, Object> map = JSON.parseObject(jsonString, Map.class);// 输出 Map 内容System.out.println(map);  // 输出: {name=John, age=25}}
}
2.5 解析 JSON 数据时的类型转换

Fastjson2 支持复杂的类型转换。你可以将 JSON 解析为 ListMap、以及任意的 Java 类型。

示例:JSON 转换为 ListMap
import com.alibaba.fastjson2.JSON;
import java.util.List;
import java.util.Map;public class Fastjson2Example {public static void main(String[] args) {String jsonArrayString = "[{\"name\":\"John\",\"age\":25}, {\"name\":\"Jane\",\"age\":28}]";// 将 JSON 数组字符串解析为 ListList<Map<String, Object>> personList = JSON.parseArray(jsonArrayString, Map.class);System.out.println(personList);  // 输出: [{name=John, age=25}, {name=Jane, age=28}]}
}

3. 高级功能

3.1 使用 JSONPath 从 JSON 中提取数据

Fastjson2 提供了 JSONPath 功能,支持复杂的查询操作,类似于 XPath 的功能。可以使用 JSONPath.eval() 来提取 JSON 数据。

示例:使用 JSONPath 提取 JSON 数据
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONPath;public class Fastjson2Example {public static void main(String[] args) {String jsonString = "{\"name\":\"John\", \"address\":{\"city\":\"Anytown\",\"street\":\"123 Main St\"}}";// 使用 JSONPath 提取城市信息Object city = JSONPath.eval(JSON.parse(jsonString), "$.address.city");System.out.println("City: " + city);  // 输出: Anytown}
}
3.2 处理自定义日期格式

你可以为 Fastjson2 设置自定义的日期格式,通过 SerializeConfig 配置。

示例:自定义日期格式
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.serializer.SerializeConfig;import java.text.SimpleDateFormat;
import java.util.Date;public class Fastjson2Example {public static void main(String[] args) {Date date = new Date();// 设置自定义日期格式SerializeConfig config = new SerializeConfig();config.put(Date.class, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));// 将日期对象转换为 JSON 字符串String jsonString = JSON.toJSONString(date, config);System.out.println(jsonString);  // 输出: 2025-01-13 14:30:00}
}
3.3 反序列化时处理空字段

Fastjson2 在反序列化 JSON 时,如果某些字段为空或者不存在,它会自动跳过该字段并不会抛出异常。你可以使用 @JSONField 注解来控制字段的序列化和反序列化行为。

示例:处理空字段
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.annotation.JSONField;public class Fastjson2Example {public static void main(String[] args) {String jsonString = "{\"name\":\"John\",\"age\":null}";// 解析 JSON 字符串时忽略空字段Person person = JSON.parseObject(jsonString, Person.class);System.out.println(person.getName());  // 输出: JohnSystem.out.println(person.getAge());   // 输出: 0 (默认值)}
}class Person {private String name;@JSONField(serialize = false)  // 不序列化private int age;// Getters and Setterspublic 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; }
}

4. 总结

Fastjson2 提供了强大且简洁的 JSON 解析功能,包括:

  • 轻松将 JSON 字符串解析为 Java 对象或 Map
  • 支持嵌套的 JSON 对象、数组和复杂类型的解析。
  • 支持通过 JSONPath 从 JSON 数据中提取数据。
  • 自定义日期格式和序列化配置。
  • 处理反序列化时的空字段、字段过滤等。

这些特性使得 Fastjson2 成为一个高效且功能丰富的 JSON 解析工具,适用于各种不同的 Java 应用场景。

相关文章:

java fastjson2 解析JSON用法解析

Fastjson2 是 Fastjson 的升级版本&#xff0c;提供了更好的性能和扩展性&#xff0c;同时也在 API 和功能上做了很多改进。使用 Fastjson2 解析 JSON 数据非常简单&#xff0c;支持多种方式来解析 JSON 字符串、嵌套 JSON 对象和数组、以及转换成 Java 对象。下面详细介绍 Fas…...

计算机视觉算法实战——步态识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​​​​​​​​​​​​​​​​ 1. 步态识别简介✨✨ 步态识别&#xff08;Gait Recognition&#xff09;是计算机视觉领域中的一个…...

LabVIEW水位监控系统

LabVIEW开发智能水位监控系统通过集成先进的传感技术与控制算法&#xff0c;为工业液体存储提供精确的水位调控&#xff0c;保证了生产过程的连续性与安全性。 项目背景 在化工和饮料生产等行业中&#xff0c;水位控制的准确性对保证生产安全和提高产品质量至关重要。传统的水…...

网络层协议-----IP协议

目录 1.认识IP地址 2.IP地址的分类 3.子网划分 4.公网IP和私网IP 5.IP协议 6.如何解决IP地址不够用 1.认识IP地址 IP 地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址。 它是分配给连接到互联网的设备&#xff08;如计算机、服务器、智能手机…...

计算机网络八股文学习笔记

总结来自于javaguide,本文章仅供个人学习复习 javaguide计算机网络八股 文章目录 计算机网络基础网络分层模型OSI七层模型TCP/IP四层模型 HTTP从输入URL到页面展示到底发生了什么?(非常重要)HTTP状态码HTTP Header中常见的字段有哪些?HTTP和HTTPS有什么区别?(重要)HTTP/1.0和…...

IntelliJ IDEA中Maven项目的配置、创建与导入全攻略

大家好&#xff0c;我是袁庭新。 IntelliJ IDEA是当前最流行的Java IDE&#xff08;集成开发环境&#xff09;之一&#xff0c;也是业界公认最好用的Java开发工具之一。IntelliJ IDEA支持Maven的全部功能&#xff0c;通过它我们可以很轻松地实现创建Maven项目、导入Maven项目、…...

如何在Jupyter中快速切换Anaconda里不同的虚拟环境

目录 介绍 操作步骤 1. 选择环境&#xff0c;安装内核 2. 注册内核 3. 完工。 视频教程 介绍 很多网友在使用Jupyter的时候会遇到各种各样的问题&#xff0c;其中一个比较麻烦的问题就是我在Anaconda有多个Python的环境里面&#xff0c;如何让jupyter快速切换不同的Pyt…...

stack和queue专题

文章目录 stack最小栈题目解析代码 栈的压入弹出序列题目解析代码 queue二叉树的层序遍历题目解析代码 stack stack和queue都是空间适配器 最小栈 最小栈的题目链接 题目解析 minst是空就进栈&#xff0c;或者是val < minst.top()就进栈 代码 class MinStack { public:M…...

【Vue】点击侧边导航栏,右侧main对应显示

需求&#xff1a;点击侧边导航栏&#xff0c;右侧main对应显示 通过v-if或v-show等指令来控制不同内容的显示隐藏来实现 注意&#xff1a; 使用v-if时候进行导航栏切换&#xff0c;右侧显示区域可能会出现样式错乱&#xff1b;使用v-show则不会出现此错误 <template>&…...

【Debug】django.db.utils.OperationalError: (1040, ‘Too many connections‘)

报错&#xff1a; django.db.utils.OperationalError: (1040, ‘Too many connections‘) 排查 可能是Mysql的连接数量超过了允许的最大连接数量&#xff1b; 查看Mysql允许最大连接数量&#xff1a; -- 查看允许连接的最大数量 SHOW VARIABLES LIKE %max_connections%;-- 查…...

如何开放2375和2376端口供Docker daemon监听

Linux (以 Ubuntu 为例) 1. 修改 Docker 配置文件 打开 Docker 的配置文件 /etc/docker/daemon.json。如果该文件不存在&#xff0c;则可以创建一个新的。 bash sudo nano /etc/docker/daemon.json在配置文件中添加以下内容&#xff1a; json {"hosts": ["un…...

RabbitMQ确保消息可靠性

消息丢失的可能性 支付服务先扣减余额和更新支付状态&#xff08;这俩是同步调用&#xff09;&#xff0c;然后通过RabbitMq异步调用支付服务更新订单状态。但是有些情况下&#xff0c;可能订单已经支付 &#xff0c;但是更新订单状态却失败了&#xff0c;这就出现了消息丢失。…...

前端常见的设计模式之【单例模式】

前端常见的设计模式&#xff1a; 单例模式观察者模式工厂模式适配器模式装饰器模式命令模式迭代器模式组合模式策略模式发布订阅模式 单例模式【创建型设计模式】&#xff1a; 单例模式是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。这个模式非常适合那些需要…...

【React】脚手架进阶

目录 暴露webpack配置package.json的变化修改webpack.config.js配置less修改域名、端口号浏览器兼容处理处理跨域 暴露webpack配置 react-scripts对脚手架中的打包命令进行封装&#xff0c;如何暴露这些打包配置呢&#xff1f;上篇写到在package.json中的scripts配置项中有eje…...

win32汇编环境,窗口程序中单选框的一般操作示例

;运行效果 ;win32汇编环境,窗口程序中单选框的一般操作示例 ;比如在窗口程序中生成单选框&#xff0c;默认哪项选中&#xff0c;判断当前选中哪一项&#xff0c;让哪项选中&#xff0c;得到选中项的名称等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>&g…...

如何移除git中被跟踪的commit文件

忽略已被跟踪的文件 问题描述 如果某个文件已经被 Git 跟踪&#xff08;即已被提交到仓库&#xff09;&#xff0c;即使后来将其添加到 .gitignore 文件中&#xff0c;Git 仍会继续跟踪它。 解决方案 更新 .gitignore 文件 将需要忽略的文件加入 .gitignore&#xff1a; .env…...

结合night compute分析 利用tensor core 优化K值较大的矩阵乘(超过cublas50%)

一 night compute分析 将cublas作为base line和现有的代码分析 图1.1 可以发现计算吞吐量明显偏低,能想到的就是计算单元处于空闲的概率较大,是访存密集型算子,因此可以增大数据的吞吐量,多给计算单元提供数据 二 代码 #include "common.h"//mma计算的基本尺…...

Docker 部署 Typecho

1. 官网 https://typecho.org/插件 & 主题 https://github.com/typecho-fans/plugins https://typechx.com/ https://typecho.work/2. 通过 compose 文件安装 github官网&#xff1a; https://github.com/typecho/Dockerfile 新建一个目录&#xff0c;存放 typecho 的相…...

【大数据】机器学习-----模型的评估方法

一、评估方法 留出法&#xff08;Holdout Method&#xff09;&#xff1a; 将数据集划分为训练集和测试集两部分&#xff0c;通常按照一定比例&#xff08;如 70% 训练集&#xff0c;30% 测试集&#xff09;。训练集用于训练模型&#xff0c;测试集用于评估模型性能。优点&…...

【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空

在 Excel 中&#xff0c;可以使用 IF 函数来判断单元格是否是 #DIV/0! 错误&#xff0c;并将其替换为空值&#xff08;即空字符串 ""&#xff09;。具体公式如下&#xff1a; IF(ISERROR(A1), "", A1)或者&#xff0c;如果只想判断 #DIV/0! 错误&#xff…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标&#xff1a; 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...

WinUI3开发_使用mica效果

简介 Mica(云母)是Windows10/11上的一种现代化效果&#xff0c;是Windows10/11上所使用的Fluent Design(设计语言)里的一个效果&#xff0c;Windows10/11上所使用的Fluent Design皆旨在于打造一个人类、通用和真正感觉与 Windows 一样的设计。 WinUI3就是Windows10/11上的一个…...