如何使用FastJSON

2024-08-28 16:12
文章标签 使用 fastjson

本文主要是介绍如何使用FastJSON,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

了解FastJSON

FastJSON的来源

FastJSON 的优点

FastJSON 的缺点

应用场景

如何使用FastJSON

添加依赖

1)Maven 项目中添加依赖

2)Gradle 项目中添加依赖

几种使用方式

1)解析 JSON 字符串为 Java 对象

2)处理嵌套的 JSON 结构(创建java对象)

3)处理嵌套的 JSON 结构(直接从 JSON 对象中获取值)

4)处理嵌套的 JSON 结构(使用路径表达式)


了解FastJSON

FastJSON的来源

FastJSON 是阿里巴巴弄出来的一个用 Java 语言写的处理 JSON 的工具。在 Java 开发里,处理 JSON 数据的需求可多了。阿里巴巴在弄那些企业级的应用和互联网服务的时候,就想要一个又快、功能又强还容易用的处理 JSON 的工具,所以他们的开发团队就搞出了 FastJSON。后来阿里巴巴把它开源了,让广大的 Java 开发者都能用,这样也能促进 Java 社区发展进步。随着时间变化,FastJSON 一直在发展完善,好多开发者都注意到它了,也爱用它,成了 Java 领域里很受欢迎的处理 JSON 的工具之一。

FastJSON 的优点
  1. 速度快:
    • 在众多 Java JSON 处理库中,FastJSON 以其高效的解析和生成 JSON 的速度而著称。它采用了一系列优化技术,如直接使用字节码生成技术、优化数据结构和算法等,使得在处理大规模 JSON 数据时具有明显的性能优势。
  1. 功能丰富:
    • 支持将 Java 对象与 JSON 字符串之间进行相互转换。可以将复杂的 Java 对象序列化为 JSON 字符串,也可以将 JSON 字符串反序列化为 Java 对象,包括自定义类、集合类型、嵌套结构等。
    • 支持多种数据类型的处理,包括基本数据类型、对象、数组、日期时间等。同时,还支持对 Java 对象中的字段进行灵活的配置,如忽略某些字段、指定字段的序列化和反序列化规则等。
  1. 易用性:
    • 提供了简洁的 API,使用起来非常方便。只需要几行代码就可以完成 Java 对象与 JSON 字符串之间的转换操作。例如,使用JSON.toJSONString(obj)可以将 Java 对象序列化为 JSON 字符串,使用JSON.parseObject(jsonStr, Class<T> clazz)可以将 JSON 字符串反序列化为 Java 对象。
  1. 兼容性:
    • 与其他 JSON 标准和库具有较好的兼容性。可以与其他基于 JSON 的系统和工具进行交互,例如与前端 JavaScript 框架进行数据交互、与数据库中的 JSON 数据进行操作等。
FastJSON 的缺点
  1. 安全问题:
    • 早期版本的时候,FastJSON 有一些安全漏洞,可能会被恶意弄的 JSON 数据攻击。虽然阿里巴巴一直在修这些漏洞,但用的时候还是得赶紧更新到最新版本,而且要注意检查输入的 JSON 数据是不是安全。
  1. 功能复杂性可能带来一些问题:
    • 由于 FastJSON 功能丰富,其配置选项也相对较多,对于一些新手开发者来说,可能需要花费一些时间来学习和理解这些配置选项。此外,在处理一些复杂的对象结构时,可能会出现一些意想不到的问题,需要开发者有一定的经验和调试能力。
  1. 社区支持相对有限:
    • 虽然 FastJSON 有一定的用户群体和社区支持,但与一些更广泛使用的开源项目相比,其社区规模可能相对较小。这可能导致在遇到一些问题时,获取帮助和解决方案的渠道相对有限。
应用场景
  1. Web 开发:
    • 在前后端分离的 Web 开发中,FastJSON 常用于将后端 Java 对象转换为 JSON 格式的数据,以便返回给前端进行展示或交互。同时,也可以将前端传来的 JSON 数据反序列化为 Java 对象,进行业务处理。
  1. 数据交换:
    • 当不同系统之间需要进行数据交换时,如果采用 JSON 作为数据格式,FastJSON 可以方便地进行数据的序列化和反序列化操作,确保数据在不同系统之间的正确传输和处理。
  1. 配置文件处理:
    • 一些应用程序可能使用 JSON 格式的配置文件。FastJSON 可以用来读取和解析这些配置文件,将其转换为 Java 对象,以便在应用程序中进行配置参数的获取和使用。
  1. 日志记录:
    • 在日志记录中,如果需要将复杂的对象信息以 JSON 格式记录下来,FastJSON 可以方便地将对象序列化为 JSON 字符串,然后写入日志文件或数据库中,方便后续的查询和分析。

如何使用FastJSON

添加依赖
1)Maven 项目中添加依赖

在 Maven 项目中使用 FastJSON,你可以在项目的 pom.xml 文件中添加以下依赖。

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

2)Gradle 项目中添加依赖

在 build.gradle 文件中添加

implementation 'com.alibaba:fastjson:1.2.83'

几种使用方式
1)解析 JSON 字符串为 Java 对象

存在一个json字符串:{"name":"John","age":30,"isStudent":false}


//定义一个 Java 类来对应这个 JSON 结构
class Person {private String name;private int age;private boolean isStudent;// 生成相应的 getter 和 setter 方法
}

直接从 JSON 对象中获取值

import com.alibaba.fastjson.JSONObject;public class Main {public static void main(String[] args) {String jsonStr = "{\"name\":\"John\",\"age\":30,\"isStudent\":false}";JSONObject jsonObject = JSON.parseObject(jsonStr);String name = jsonObject.getString("name");int age = jsonObject.getInteger("age");boolean isStudent = jsonObject.getBooleanValue("isStudent");System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("Is Student: " + isStudent);}
}

2)处理嵌套的 JSON 结构(创建java对象)

已知存在一个josn:{"person":{"name":"John","age":30},"address":{"city":"New York","country":"USA"}}

//定义对应的 Java 类
class Person {private String name;private int age;// getter 和 setter 方法
}class Address {private String city;private String country;// getter 和 setter 方法
}class RootObject {private Person person;private Address address;// getter 和 setter 方法
}

解析:

import com.alibaba.fastjson.JSON;public class Main {public static void main(String[] args) {String jsonStr = "{\"person\":{\"name\":\"John\",\"age\":30},\"address\":{\"city\":\"New York\",\"country\":\"USA\"}}";RootObject rootObject = JSON.parseObject(jsonStr, RootObject.class);Person person = rootObject.getPerson();Address address = rootObject.getAddress();String name = person.getName();int age = person.getAge();String city = address.getCity();String country = address.getCountry();System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

3)处理嵌套的 JSON 结构(直接从 JSON 对象中获取值)

存在json串:

{"user":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

import com.alibaba.fastjson.JSONObject;public class Main {public static void main(String[] args) {String jsonStr = "{\"user\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";JSONObject jsonObject = JSON.parseObject(jsonStr);JSONObject userObject = jsonObject.getJSONObject("user");String userName = userObject.getString("name");int userAge = userObject.getInteger("age");JSONObject addressObject = userObject.getJSONObject("address");String city = addressObject.getString("city");String country = addressObject.getString("country");JSONArray ordersArray = jsonObject.getJSONArray("orders");for (int i = 0; i < ordersArray.size(); i++) {JSONObject orderObject = ordersArray.getJSONObject(i);int orderId = orderObject.getInteger("id");String product = orderObject.getString("product");System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("User Name: " + userName);System.out.println("User Age: " + userAge);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

4)处理嵌套的 JSON 结构(使用路径表达式)

存在json串:

{"user":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

import com.alibaba.fastjson.JSONPath;public class Main {public static void main(String[] args) {String jsonStr = "{\"user\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";String userName = (String) JSONPath.read(jsonStr, "$.user.name");int userAge = (int) JSONPath.read(jsonStr, "$.user.age");String city = (String) JSONPath.read(jsonStr, "$.user.address.city");String country = (String) JSONPath.read(jsonStr, "$.user.address.country");Object[] orders = JSONPath.read(jsonStr, "$.orders");for (Object order : orders) {int orderId = (int) JSONPath.read(order, "$.id");String product = (String) JSONPath.read(order, "$.product");System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("User Name: " + userName);System.out.println("User Age: " + userAge);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

这篇关于如何使用FastJSON的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115251

相关文章

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen