工具型网站有哪些,济宁做网站有哪几家,高权重网站发外链,商城域名注册管理机构Fastjson2 是 Fastjson 的升级版本#xff0c;提供了更好的性能和扩展性#xff0c;同时也在 API 和功能上做了很多改进。使用 Fastjson2 解析 JSON 数据非常简单#xff0c;支持多种方式来解析 JSON 字符串、嵌套 JSON 对象和数组、以及转换成 Java 对象。下面详细介绍 Fas…Fastjson2 是 Fastjson 的升级版本提供了更好的性能和扩展性同时也在 API 和功能上做了很多改进。使用 Fastjson2 解析 JSON 数据非常简单支持多种方式来解析 JSON 字符串、嵌套 JSON 对象和数组、以及转换成 Java 对象。下面详细介绍 Fastjson2 的常见 JSON 解析用法。
1. 引入 Fastjson2 依赖
在使用 Fastjson2 之前确保项目中包含相应的依赖。
Maven 依赖
dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.31/version !-- 使用最新版本 --
/dependencyGradle 依赖
implementation com.alibaba.fastjson2:fastjson2:2.0.312. 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()); // 输出: JohnSystem.out.println(person.getAge()); // 输出: 25}
}class Person {private String name;private int age;// Getters and Setterspublic 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 字符串为 JSONObjectJSONObject 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); // 输出: AnytownSystem.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 数组解析为 ListJSONArray 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 解析为 MapMapString, Object map JSON.parseObject(jsonString, Map.class);// 输出 Map 内容System.out.println(map); // 输出: {nameJohn, age25}}
}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 数组字符串解析为 ListListMapString, Object personList JSON.parseArray(jsonArrayString, Map.class);System.out.println(personList); // 输出: [{nameJohn, age25}, {nameJane, age28}]}
}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()); // 输出: JohnSystem.out.println(person.getAge()); // 输出: 0 (默认值)}
}class Person {private String name;JSONField(serialize false) // 不序列化private int age;// Getters and Setterspublic 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 应用场景。