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. Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结
  2. 影像组学视频学习笔记(25)-查看准确度、灵敏度、特异度及混淆矩阵、Li‘s have a solution and plan.
  3. linux 分区克隆软件 partclone 简介
  4. python操作文件夹-Python文件操作大全,随机删除文件夹内的任意文件
  5. 计算机网络第一章:计算机网络概述
  6. 深入Linux PAM体系结构
  7. 钉钉宜搭邵磊:钉钉宜搭低代码加速业务互联 让改变发生
  8. Android开发中的多线程编程技术
  9. why new AET extension field creation will lead to session restart
  10. C++教程:C++工程构建常用工具有哪些?
  11. chrome浏览器下audio自动播放的hack
  12. 企业微信api发送告警信息
  13. 计算机专业论文答辩ppt,计算机行业毕业论文答辩PPT.pptx
  14. PyTorch中的torch.max()和torch.maximum()的用法详解
  15. 6月6日重庆 减肥美容、无痕线雕提升技术精品班 (顾春英)
  16. Win10忘记登录密码,系统U盘/光盘轻松重置
  17. Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException
  18. 链式法则(chain rule)
  19. sio.loadmat加载高光谱图像出错:OSError: could not read bytes
  20. VLOOKUP常见错误及解决办法

热门文章

  1. 联想thinkpad E420电脑蓝屏
  2. 剑侠录java_新蜀山剑侠录-刀剑痕
  3. 在政策的加持下,助力服装纺织企业发展
  4. 联诚发总裁龙平芳受邀出席航城街道高质量发展暨招商推介大会!
  5. Linux系统网卡出现drop,linux 清除网卡缓存
  6. 最长回文字符串(马拉车算法)
  7. [年度极品 普7风暴]《中关村GHOST WIN7纯净自选旗舰年度珍藏版2010V12》
  8. 企业信使运营管理平台官网_注册_开自助充值
  9. 来自2020年应届生毕业后的第一段实习经历以及对未毕业同学们的一些友好提示
  10. Ubuntu_ROS中应用kinect v2笔记