当前位置: 首页 > 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…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...