FastJson笔记
FastJson笔记
1、简介
- Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
- FastJson源码地址:https://github.com/alibaba/fastjson
- FastJson中文Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
2、优点
2.1 速度快
FastJson相对其他JSON库的特点是快,从2011年FastJson发布1.1.x版本之后,其性能从未被其他java实现的JSON库超越。
2.2 使用广泛
FastJson在阿里巴巴大规模使用,在数万台服务器上部署,FastJson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。
2.3 测试完备
FastJson有非常多的测试case,在1.2.11版本中,测试case超过3321个。每次发布都会进行回归测试,保证质量稳定。
2.4 使用简单
FastJson的API十分简洁。
String text = JSON.toJSONString(obj); // 序列化
VO vo = JSON.parseObject("{...}", VO.class); // 反序列化
2.5 功能完备
支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。
3、下载
-
下载jar包:https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.53/fastjson-1.2.53.jar
-
配置Maven依赖:
-
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>x.x.x</version> </dependency>
-
其中x.x.x是版本号,根据需要使用特定版本,建议使用最新版本。
-
4、使用
4.1 Java对象 转成 JSON字符串
Student stu = new Student();
stu.setName("张三");
stu.setAge(15);
stu.setAddress("成都");
// java对象 转换成 JSON 字符串
String jsonString = JSON.toJSONString(stu);
System.out.println(jsonString); // {"address":"成都","age":15,"name":"张三"}
4.2 list集合转JSON格式的字符串
@Test
public void test1() {
// List集合转 JSON字符串
ArrayList<Student> list = new ArrayList<>();
Student stu1 = new Student();
stu1.setId(1);
stu1.setAge(22);
stu1.setName("king");
stu1.setFlag(true);
stu1.setAddress("成都");
Student stu2 = new Student();
stu2.setId(2);
stu2.setAge(24);
stu2.setName("green");
stu2.setFlag(false);
stu2.setAddress("重庆");
list.add(stu1);
list.add(stu2);
String jsonString = JSON.toJSONString(list,SerializerFeature.PrettyFormat);
System.out.println(jsonString);
}
/*
[
{
"address":"成都",
"age":22,
"flag":true,
"id":1,
"name":"king"
},
{
"address":"重庆",
"age":24,
"flag":false,
"id":2,
"name":"green"
}
]
*/
4.3 Map集合转成 JSON字符串
@Test
public void test2() {
// Map集合 转JSON格式字符串
HashMap<String, Student> map = new HashMap<>();
Student stu1 = new Student();
stu1.setId(1);
stu1.setAge(22);
stu1.setName("king");
stu1.setFlag(true);
stu1.setAddress("成都");
Student stu2 = new Student();
stu2.setId(2);
stu2.setAge(24);
stu2.setName("green");
stu2.setFlag(false);
stu2.setAddress("重庆");
map.put("stu1", stu1);
map.put("stu2", stu2);
String jsonString = JSON.toJSONString(map,SerializerFeature.PrettyFormat);
System.out.println(jsonString);
}
/*
{
"stu2":{
"address":"重庆",
"age":24,
"flag":false,
"id":2,
"name":"green"
},
"stu1":{
"address":"成都",
"age":22,
"flag":true,
"id":1,
"name":"king"
}
}
*/
4.4 JSON字符串 转换成 Java对象 parseObject
String data = "{\"address\":\"成都\",\"age\":15,\"name\":\"张三\"}";
JSONObject parseObject = JSON.parseObject(data);
// System.out.println(parseObject);
String address = parseObject.getString("address");
Integer age = parseObject.getInteger("age");
System.out.println(address); // 成都
System.out.println(age); // 15
4.5 JSON字符串 转成 List集合
@Test
public void test3() {
// JSON格式字符串转成List 集合
String jsonString = "[{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"},{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"}]";
List<Student> students = JSON.parseArray(jsonString, Student.class);
for (Student stu :students) {
System.out.println(stu);
}
}
/*
Student(id=1, age=22, name=king, address=成都, flag=true)
Student(id=2, age=24, name=green, address=重庆, flag=false)
*/
4.6 JSON字符串 转成 Map集合
@Test
public void test4() {
// JSON格式字符串转成 Map集合
String jsonString = "{\"stu2\":{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"},\"stu1\":{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"}}";
Map<String,Student> map = JSON.parseObject(jsonString, new TypeReference<HashMap<String, Student>>(){} );
System.out.println(map);
}
/*
{
stu2=Student(id=2, age=24, name=green, address=重庆, flag=false),
stu1=Student(id=1, age=22, name=king, address=成都, flag=true)
}
*/
5. @JSONField注解的使用
5.1 @JSONField注解的使用
@JSONField注解 可以用在 方法(method),属性(field)以及方法中的参数(parameter)上
JSONField注解的源码
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface JSONField {
int ordinal() default 0; // 配置序列化和反序列化的顺序
String name() default ""; // 指定字段的名称
String format() default ""; // 指定字段的格式,对⽇期格式有⽤
boolean serialize() default true; // 是否序列化
boolean deserialize() default true; // 是否反序列化
// 可以通过serialzeFeatures、parseFeatures的属性值SerializerFeature.WriteMapNullValue来控制
SerializerFeature[] serialzeFeatures() default {}; // 控制序列化的一些规则
Feature[] parseFeatures() default {}; // 控制序列化的一些规则
String label() default "";
boolean jsonDirect() default false;
Class<?> serializeUsing() default Void.class;
Class<?> deserializeUsing() default Void.class;
String[] alternateNames() default {};
boolean unwrapped() default false;
String defaultValue() default "";
}
本文来自博客园,作者:CoderTL,转载请注明原文链接:https://www.cnblogs.com/codertl/p/14621565.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix