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 学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. 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 ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. Java方法,调用,static关键字
  2. 9月22日我国垃圾邮件报告:湖北省再居榜首
  3. SMARTFORMS打印后转存为PDF文件相关问题
  4. 2019ICPC(上海) - Counting Sequences I(dfs打表)
  5. Windows 服务(附服务开发辅助工具)
  6. 【算法竞赛学习】资金流入流出预测-挑战Baseline_数据探索与分析1
  7. vant在cell中加表格_Vant Cell 单元格
  8. matlab绘制二元一次函数图像_如何用matlab数据拟合函数?用matlab求解多元线性方程...
  9. 计算机键盘上的每一个按键读音,电脑键盘上各键的名称功能及作用.doc
  10. 关解决windows报错 Use `--location=global` instead. 和 found 0 vulnerabilities
  11. winscp是什么软件_文件传输软件WinSCP的使用
  12. 修复损坏的gzip压缩文件方法之实用篇
  13. One-move Checkmate (ZOJ 1598)
  14. Android进阶(二十六)MenuInflater实现菜单添加
  15. chromium java_Chromium弹出Raspbian
  16. php计算根据出生日期计算年龄
  17. Go 语言中的 logger 和 zap 日志库
  18. 服务熔断与降级(Sentinel)
  19. 2021年全球医用非织造布收入大约3140.4百万美元,预计2028年达到4497百万美元
  20. 使用 XAML 编写 Windows Presentation Foundation (WPF) 应用

热门文章

  1. 调整小组成员架构对外称呼_考虑如何称呼团队成员和经理
  2. 复变函数——学习笔记4:复变函数的积分
  3. 分享米筐量化的使用方法
  4. 商标“李鬼”防不胜防,事关宁德时代
  5. 【Unity2D入门教程】简单制作战机弹幕射击游戏② C#编写 Player和Enemy脚本
  6. 龙芯3A5000LL与i7-10700的UnixBench跑分对比
  7. Pytorch Random Erasing
  8. 现在win10上有触摸板的设定吗?
  9. STM32G070RBT6基于Arduino框架下串口数据接收使用示例
  10. 实时通讯音视频互动开发需求汇总