当前位置: 代码网 > it编程>编程语言>Java > Java fastjson2 解析JSON用法详解

Java fastjson2 解析JSON用法详解

2025年02月13日 Java 我要评论
fastjson2 是 fastjson 的升级版本,提供了更好的性能和扩展性,同时也在 api 和功能上做了很多改进。使用 fastjson2 解析 json 数据非常简单,支持多种方式来解析 js

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com