Java fastjson2 解析JSON用法详解

 更新时间:2025年02月11日 10:26:03   作者:风_流沙  
Fastjson2是Fastjson的升级版,提供了更好的性能和扩展性,它支持多种方式解析JSON数据,包括将JSON字符串转换为Java对象、嵌套的JSON对象和数组,以及转换成Map或List,本文介绍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());  // 输出: John
        System.out.println(person.getAge());   // 输出: 25
    }
}
class Person {
    private String name;
    private int age;
    // Getters and Setters
    public 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 字符串为 JSONObject
        JSONObject 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);      // 输出: Anytown
        System.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 数组解析为 List
        JSONArray 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 解析为 Map
        Map<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 数组字符串解析为 List
        List<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());  // 输出: John
        System.out.println(person.getAge());   // 输出: 0 (默认值)
    }
}
class Person {
    private String name;
    @JSONField(serialize = false)  // 不序列化
    private int age;
    // Getters and Setters
    public 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用法解析的文章就介绍到这了,更多相关java fastjson2 解析JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java雪花算法的实现详解

    Java雪花算法的实现详解

    雪花算法(Snowflake)是一种分布式唯一ID生成算法,用于生成全局唯一的ID,使用雪花算法生成的ID通常是一个64位的整数,可以根据需要进行转换和展示,在Java等编程语言中,可以使用相应的库或工具来生成雪花算法的ID,本文给大家介绍了Java雪花算法的实现
    2023-11-11
  • java实现简单年龄计算器

    java实现简单年龄计算器

    这篇文章主要为大家详细介绍了java实现简单年龄计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • java实现双色球机选号码生成器

    java实现双色球机选号码生成器

    这篇文章主要为大家详细介绍了java实现双色球机选号码生成器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • 继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器

    继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器

    这篇文章主要介绍了继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Java虚拟机启动过程探索

    Java虚拟机启动过程探索

    当我们在编写Java应用的时候,很少会注意Java程序是如何被运行的,如何被操作系统管理和调度的,带着好奇心,探索一下Java虚拟机启动过程
    2022-05-05
  • Java NIO异步文件通道原理及用法解析

    Java NIO异步文件通道原理及用法解析

    这篇文章主要介绍了Java NIO异步文件通道原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SpringMVC中的请求参数接收方式

    SpringMVC中的请求参数接收方式

    这篇文章主要介绍了SpringMVC中的请求参数接收方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java中让界面内的时间及时更新示例代码

    Java中让界面内的时间及时更新示例代码

    这篇文章主要给大家介绍了关于Java中让界面内的时间及时更新的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • JVM内置函数Intrinsics介绍

    JVM内置函数Intrinsics介绍

    这篇文章主要介绍了JVM内置函数Intrinsics,我们将学习什么是intrinsics(内部/内置函数),以及它们如何在Java和其他基于JVM的语言中工作,需要的朋友可以参考一下
    2022-02-02
  • 使用springboot单例模式与线程安全问题踩的坑

    使用springboot单例模式与线程安全问题踩的坑

    这篇文章主要介绍了使用springboot单例模式与线程安全问题踩的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论