当前位置:   article > 正文

11-高性能JSON库——fastjson2

fastjson2

目录

1.具体使用

1.1.添加fastjson2依赖

1.2.常用类和方法

1.3.将JSON字符串转换成对象

1.3.1.JSON字符串转换成对象

1.3.2.JSON字符串转换成数组

1.4.将对象转换成JSON字符串

1.4.1.将对象转换成JSON字符串

1.4.2.将数组转换成 JSON 字符串

2.性能测试报告

3.总结


fastjson2 是 fastjson 项目的重要升级,目标是为下一个十年提供一个高性能的 JSON 库,同一套 API 支持JSON/JSONB 两种协议,JSONPath 是一等公民,支持全量解析和部分解析,支持 Java 服务端、客户端Android、大数据场景。

1.具体使用

1.1.添加fastjson2依赖

Maven依赖配置如下:

  1. <dependency>
  2. <groupId>com.alibaba.fastjson2</groupId>
  3. <artifactId>fastjson2</artifactId>
  4. <version>2.0.2</version>
  5. </dependency>

1.2.常用类和方法

  1. package com.alibaba.fastjson2;
  2. class JSON {
  3. // 将字符串解析成JSONObject
  4. static JSONObject parseObject(String str);
  5. // 将字符串解析成JSONArray
  6. static JSONArray parseArray(String str);
  7. // 将字符串解析成Java对象
  8. static T parseObject(byte[] utf8Bytes, Class<T> objectClass);
  9. // 将Java对象输出成字符串
  10. static String toJSONString(Object object);
  11. // 将Java对象输出成UT8编码的byte[]
  12. static byte[] toJSONBytes(Object object);
  13. }
  14. class JSONB {
  15. // 将jsonb格式的byte[]解析成Java对象
  16. static T parseObject(byte[] jsonbBytes, Class<T> objectClass);
  17. // 将Java对象输出成jsonb格式的byte[]
  18. static byte[] toBytes(Object object);
  19. }
  20. class JSONObject {
  21. Object get(String key);
  22. int getIntValue(String key);
  23. Integer getInteger(String key);
  24. long getLongValue(String key);
  25. Long getLong(String key);
  26. T getObject(String key, Class<T> objectClass);
  27. // 将JSONObject对象转换为Java对象
  28. T toJavaObject(Class<T> objectClass);
  29. }
  30. class JSONArray {
  31. Object get(int index);
  32. int getIntValue(int index);
  33. Integer getInteger(int index);
  34. long getLongValue(int index);
  35. Long getLong(int index);
  36. T getObject(int index, Class<T> objectClass);
  37. }
  38. class JSONPath {
  39. // 构造JSONPath
  40. static JSONPath of(String path);
  41. // 根据path直接解析输入,会部分解析优化,不会全部解析
  42. Object extract(JSONReader jsonReader);
  43. // 根据path对对象求值
  44. Object eval(Object rootObject);
  45. }
  46. class JSONReader {
  47. // 构造基于String输入的JSONReader
  48. static JSONReader of(String str);
  49. // 构造基于ut8编码byte数组输入的JSONReader
  50. static JSONReader of(byte[] utf8Bytes);
  51. // 构造基于char[]输入的JSONReader
  52. static JSONReader of(char[] chars);
  53. // 构造基于json格式byte数组输入的JSONReader
  54. static JSONReader ofJSONB(byte[] jsonbBytes)
  55. }

1.3.将JSON字符串转换成对象

1.3.1.JSON字符串转换成对象

  1. String str = "{\"id\":123}";
  2. JSONObject jsonObject = JSON.parseObject(str);
  3. int id = jsonObject.getIntValue("id");

1.3.2.JSON字符串转换成数组

  1. String str = "[\"id\", 123]";
  2. JSONArray jsonArray = JSON.parseArray(str);
  3. String name = jsonArray.getString(0);
  4. int id = jsonArray.getIntValue(1);

1.4.将对象转换成JSON字符串

1.4.1.将对象转换成JSON字符串

  1. class Product {
  2. public int id;
  3. public String name;
  4. }
  5. Product product = new Product();
  6. product.id = 1001;
  7. product.name = "DataWorks";
  8. JSON.toJSONString(product);

以上程序执行结果如下:

  1. {
  2. "id" : 1001,
  3. "name" : "DataWorks"
  4. }

1.4.2.将数组转换成 JSON 字符串

JSON.toJSONString(product, JSONWriter.Feature.BeanToArray);

以上程序执行结果如下:

[123, "DataWorks"]

2.性能测试报告

fastjson2、fastjson1 和 jackson 使用 JMH (Java Microbenchmark Harness) 在 JDK 8 和 JDK 11 的测试数据如下:

3.总结

fastjson 2 相比于 fastjson 1 性能大概提升了 200%+,它的目标是成为下一个 10 年的高性能 JSON 操作工具,但如果是老项目将 fastjson 1 升级为 fastjson 2 要慎重一些,因为 fastjson 2 不保证 100% 兼容 fastjson 1。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/1005534
推荐阅读
相关标签
  

闽ICP备14008679号