fastjson2 是 fastjson 的升级版本,提供了更好的性能和扩展性,同时也在 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 对象,可以直接解析为 map 或 list。
示例:将 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 解析为 list、map、以及任意的 java 类型。
示例:json 转换为 list 和 map
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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论