欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Javafastjson2解析JSON用法详解,

来源: javaer 分享于  点击 41123 次 点评:254

Javafastjson2解析JSON用法详解,


目录
  • 1. 引入 Fastjson2 依赖
  • 2. JSON 解析
    • 2.1 解析 JSON 字符串为 Java 对象
    • 2.2 解析嵌套的 JSON 对象
    • 2.3 解析 JSON 数组
    • 2.4 解析 JSON 字符串为 Map
    • 2.5 解析 JSON 数据时的类型转换
  • 3. 高级功能
    • 3.1 使用 JSONPath 从 JSON 中提取数据
    • 3.2 处理自定义日期格式
    • 3.3 反序列化时处理空字段
  • 4. 总结

    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内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

    您可能感兴趣的文章:
    • java fastJson转JSON两种常见的转义操作
    • Java中对象 和 json 互转四种方式 json-lib、Gson、FastJson、Jackson
    • java如何使用fastjson修改多层嵌套的Objectjson数据
    • Java使用fastjson对String、JSONObject、JSONArray相互转换
    • Java基础之FastJson详解
    相关栏目:

    用户点评