FastJSON2 学习笔记
FastJSON2 学习笔记
- pom.xml
- 非完美兼容 fastjson1
- 测试数据
- JavaBean
- Json String
- 序列化
- toJSONString
- Features
- 1. 格式化输出
- 2. 序列化时输出类型信息
- 3. 使用单引号
- 4. 序列话时包含为 null 的字段
- 反序列化
- JSONObject
- jsonString 转 JavaBean
- jsonString 转 JSONObject
- JSONObject 转 JavaBean
- JSONObject 获取 JavaBean
- JSONArray
- jsonString 转 JSONArray
- JSONArray 转 List
- jsonString 转 List
- jsonString 转 Map
- JSONPath
- eval
- of
- 参考资料
- Fastjson_学习笔记
- GitHub:alibaba/fastjson2
- Gitee:wenshao:fastjson2
- Gitee:astjson2文档
FASTJSON2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。
官方如是说。
pom.xml
查看新版本: maven.org 。
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.12</version></dependency>
非完美兼容 fastjson1
如果原来使用fastjson 1.2.x
版本,可以使用兼容包,兼容包不能保证100%兼容,请仔细测试验证,发现问题请及时反馈。
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.14</version>
</dependency>
测试数据
JavaBean
在另一篇文章里有,直接取来用。
Json String
[{"name": "张三", "age": 10, "score": 23, "groupTag": "A"},{"name": "李四", "age": 20, "score": 19, "groupTag": "A"}, {"name": "王五", "age": 30, "score": 20, "groupTag": "B"},{"name": "赵六", "age": 40, "score": 21, "groupTag": "B"}, {"name": "洪七", "age": 50, "score": 25, "groupTag": "C"},{"name": "重八", "age": 60, "score": 45, "groupTag": "C"}
]
序列化
toJSONString
Hero hero = Hero.getList().get(0);
String jsonString = JSONObject.toJSONString(hero);
{"age":10,"groupTag":"A","name":"张三","score":23}
Features
更多详情,见参考资料:通过Features配置序列化和反序列化的行为
1. 格式化输出
Hero hero = Hero.getList().get(0);
String jsonString = JSON.toJSONString(hero, JSONWriter.Feature.PrettyFormat);
{"age":10,"groupTag":"A","name":"张三","score":23
}
2. 序列化时输出类型信息
Hero hero = Hero.getList().get(0);
String jsonString = JSON.toJSONString(hero, JSONWriter.Feature.WriteClassName);
{"@type": "com.jerry.demo.fastjson2demo.entity.Hero","age": 10,"groupTag": "A","name": "张三","score": 23
}
3. 使用单引号
JSONWriter.Feature.UseSingleQuotes
Hero hero = Hero.getList().get(0);
String jsonString = JSONObject.toJSONString(hero,JSONWriter.Feature.PrettyFormat, // 格式化输出JSONWriter.Feature.UseSingleQuotes); // 使用单引号
{ "age":10, 'groupTag':null, 'name':'张三', "score":23 }
4. 序列话时包含为 null 的字段
JSONWriter.Feature.WriteNulls
Hero hero = Hero.getList().get(0);
hero.setGroupTag(null);
String jsonString = JSONObject.toJSONString(hero,JSONWriter.Feature.PrettyFormat, // 格式化输出JSONWriter.Feature.UseSingleQuotes, // 使用单引号JSONWriter.Feature.WriteNulls); // 序列话时包含为 null 的字段
{ "age":10, 'groupTag':null, 'name':'张三', "score":23 }
反序列化
JSONObject
jsonString 转 JavaBean
String jsonString = "{ 'age':10,'groupTag':'A','name':'张三','score':23 }";
Hero hero = JSONObject.parseObject(jsonString, Hero.class);
jsonString 转 JSONObject
String jsonString = "{ 'age':10,'groupTag':'A','name':'张三','score':23 }";
JSONObject jsonObject = JSONObject.parseObject(jsonString);int id = jsonObject.getIntValue("age");
String name = jsonObject.getString("name");
JSONObject 转 JavaBean
String jsonString = "{ 'age':10,'groupTag':'A','name':'张三','score':23 }";
JSONObject jsonObject = JSONObject.parseObject(jsonString);Hero hero = jsonObject.to(Hero.class);
JSONObject 获取 JavaBean
String jsonString = "{" +"'张三': { 'age':10,'groupTag':'A','name':'张三','score':23 }," +"'李四': { 'age':11,'groupTag':'B','name':'李四','score':28 }" +"}";
JSONObject jsonObject = JSONObject.parseObject(jsonString);Object obj = jsonObject.get("张三");
System.out.println(obj); // {"age":10,"groupTag":"A","name":"张三","score":23}Hero hero = jsonObject.getObject("李四", Hero.class);
System.out.println(hero); // Hero(name=李四, age=11, score=28, groupTag=B)
JSONArray
jsonString 转 JSONArray
String jsonString = "[" +"{ 'age':10,'groupTag':'A','name':'张三','score':23 }," +"{ 'age':11,'groupTag':'B','name':'李四','score':28 }" +"]";
JSONArray jsonArray = JSONArray.parseArray(jsonString);Object o = jsonArray.get(0);
System.out.println(o); // {"age":10,"groupTag":"A","name":"张三","score":23}Hero hero = jsonArray.getObject(0, Hero.class);
System.out.println(hero); // Hero(name=张三, age=10, score=23, groupTag=A)
JSONArray 转 List
String jsonString = "[" +"{ 'age':10,'groupTag':'A','name':'张三','score':23 }," +"{ 'age':11,'groupTag':'B','name':'李四','score':28 }" +"]";
JSONArray jsonArray = JSON.parseArray(jsonString);
List<Hero> list = jsonArray.toJavaList(Hero.class);
System.out.println(list);
// [Hero(name=张三, age=10, score=23, groupTag=A), Hero(name=李四, age=11, score=28, groupTag=B)]
jsonString 转 List
String jsonString = "[" +"{ 'age':10,'groupTag':'A','name':'张三','score':23 }," +"{ 'age':11,'groupTag':'B','name':'李四','score':28 }" +"]";
List<Hero> list = JSON.parseArray(jsonString, Hero.class);
System.out.println(list);
// [Hero(name=张三, age=10, score=23, groupTag=A), Hero(name=李四, age=11, score=28, groupTag=B)]
jsonString 转 Map
String jsonString = "{" +"'张三': { 'age':10,'groupTag':'A','name':'张三','score':23 }," +"'李四': { 'age':11,'groupTag':'B','name':'李四','score':28 }" +"}";TypeReference<HashMap<String, Hero>> tr = new TypeReference<HashMap<String, Hero>>() {};HashMap<String, Hero> map = JSONObject.parseObject(jsonString, tr);System.out.println(map);
// {李四=Hero(name=李四, age=11, score=28, groupTag=B), 张三=Hero(name=张三, age=10, score=23, groupTag=A)}
JSONPath
eval
给定 JSON字符串
和路径
解析出对象。
JSONPath.eval(JavaBean, "JSONPathStr")
List<Hero> list = Hero.getList();
String jsonString = JSONObject.toJSONString(list);Hero hero = (Hero)JSONPath.eval(jsonString, "$[0]");
System.out.println(hero); // Hero(name=张三, age=10, score=23, groupTag=A)JSONObject jsonObject = (JSONObject)JSONPath.eval(jsonString, "$[0]");
Hero hero = jsonObject.to(Hero.class);
System.out.println(hero); // Hero(name=张三, age=10, score=23, groupTag=A)String name = (String)JSONPath.eval(jsonString, "$[0].name");
System.out.println(name); // 张三
列表也是支持的
String jsonString = "[" +"{ 'age':10,'groupTag':'A','name':'张三','score':23 }," +"{ 'age':11,'groupTag':'B','name':'李四','score':28 }" +"]";
JSONArray array = (JSONArray)JSONPath.eval(jsonString, "$");
List<Hero> list = array.toJavaList(Hero.class);
System.out.println(list);
of
用于多次读取的情况
JSONReader.of("jsonString");
JSONReader parser = JSONReader.of("[ {\"age\":10,\"groupTag\":\"A\",\"name\":\"张三\",\"score\":23} ]");
JSONPath path = JSONPath.of("$[0].name"); // 缓存起来重复使用能提升性能
String name = (String)path.extract(parser);
System.out.println(name); // 张三
参考资料
Fastjson_学习笔记
GitHub:alibaba/fastjson2
Gitee:wenshao:fastjson2
Gitee:astjson2文档
- FASTJSON2提供的Annotations
- FASTJSON 2 Autotype机制介绍
- 通过Features配置序列化和反序列化的行为(格式化、别名等。。。)
- FASTJSON v2 JSONSchema的支持
- FASTJSON2 JSONPath支持介绍
- 使用Mixin注入Anntation定制序列化和反序列化
- 列化时对字段名做处理的扩展接口 NameFilter
- 在 Spring 中集成 Fastjson2
FastJSON2 学习笔记相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
最新文章
- Java方法,调用,static关键字
- 9月22日我国垃圾邮件报告:湖北省再居榜首
- SMARTFORMS打印后转存为PDF文件相关问题
- 2019ICPC(上海) - Counting Sequences I(dfs打表)
- Windows 服务(附服务开发辅助工具)
- 【算法竞赛学习】资金流入流出预测-挑战Baseline_数据探索与分析1
- vant在cell中加表格_Vant Cell 单元格
- matlab绘制二元一次函数图像_如何用matlab数据拟合函数?用matlab求解多元线性方程...
- 计算机键盘上的每一个按键读音,电脑键盘上各键的名称功能及作用.doc
- 关解决windows报错 Use `--location=global` instead. 和 found 0 vulnerabilities
- winscp是什么软件_文件传输软件WinSCP的使用
- 修复损坏的gzip压缩文件方法之实用篇
- One-move Checkmate (ZOJ 1598)
- Android进阶(二十六)MenuInflater实现菜单添加
- chromium java_Chromium弹出Raspbian
- php计算根据出生日期计算年龄
- Go 语言中的 logger 和 zap 日志库
- 服务熔断与降级(Sentinel)
- 2021年全球医用非织造布收入大约3140.4百万美元,预计2028年达到4497百万美元
- 使用 XAML 编写 Windows Presentation Foundation (WPF) 应用