Jboot v3.14.3 发布,带来了市面上最好用的 JSON 解析工具

Jboot 一个更简单的分布式、微服务框架。

Jboot是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务、分布式开发门槛。爽爽开发,快乐生活。

支持 JDK8~JDK17。

Jboot v3.14.3 主要是优化细节,并新增了一个 JSON 解析工具类 JsonUtil,用于解析 Json 数据,可能是市面上最好用的 Json 解析工具。Talk is cheap...

假设 JSON 内容如下:

{
  "array": [
    1,
    2,
    3
  ],
  "type": true,
  "number": 123,
  "users": [
    {
      "id": 1,
      "nickname": "Michael"
    },
    {
      "id": 2,
      "nickname": "Jean"
    }
  ],
  "key1": {
    "key2": "welcome to WWW.CodeFormat.CN"
  }
}
Boolean type = JsonUtil.getBool(json,"type");
//type == true

BigInteger n = JsonUtil.getBigInteger("number")
// n == 123

String[] array = JsonUtil.get(json,"array",String[].class)
//array == ["1","2","3"]


int[] array = JsonUtil.get(json,"array",int[].class)
//array == [1,2,3]


 Map map = JsonUtil.get(json,"object",Map.class)
 //map == {"a":"b","c":"d","e":1}


int x = JsonUtil.getInt(json,"array[1]");
// x == 2

String key = JsonUtil.getString(json,"key1.key2");
// key == "welcome to 
 
User[] users = JsonUtil.get(json,"users",User[].class)
// users == [{"id":1,"nickname":"Michael"},{"id":2,"nickname":"Jean"}]


List<User> users = JsonUtil.get(json,"users",new TypeDef<List<User>>())
// users == [{"id":1,"nickname":"Michael"},{"id":2,"nickname":"Jean"}]


Set<User> users = JsonUtil.get(json,"users",new TypeDef<Set<User>>())
// users == [{"id":1,"nickname":"Michael"},{"id":2,"nickname":"Jean"}]


Integer[] userIds = JsonUtil.get(json,"users.id",Interger[].class)/
/userIds == [1,2]


Integer  user1Id = JsonUtil.getInt(json,"users[0].id")
//user1Id == 1

List<String> nicknames = JsonUtil.get(json,"users.nickname",new TypeDef<List<String>>())
// users == ["Michael","Jean"]

 

Jboot v3.14.3  更新内容如下:

  • 新增:注解 @Table(datasource="xxx") 新增对数据源的配置支持

  • 新增:添加 jboo.app.listenerPackage 配置支持,用于只扫描哪些包的 listener

  • 新增:Informix 数据库方言,感谢 @xujianxie 同学

  • 新增:JbootModel 新增 findByIdWithoutCache() 方法

  • 新增:新增 JbootModel 的 CPI 类,用于开放保护方法

  • 新增:Nacos 远程配置中心添加多实例的配置支持

  • 新增:网关拦截器 GatewayConfig.interceptors 添加 SPI 名称配置的支持

  • 新增:JsonUtil.java 方便解析 Json 数据

  • 优化:ValidUtil.java,支持在非自定义消息的时候输出拦截的列名

  • 优化:ClassScanner.java 默认关闭 Class 扫描信息在控制台输出

  • 优化:修改缓存拦截器的默认权重为 100,当前情况下拦截器在最后执行

  • 优化:完善 JbootJson 更多的代码注释

  • 优化:优化 JbootConfigManager.java 代码,对添加 key 进行 trim()

  • 优化:进一步完善 jboot.properties 文件存放位置的探测

  • 优化:单元测试移除 mockHandler

  • 优化:DAO.findFirstByColumn(),当传入 null 应抛出错误,防止查询出错误的数据

  • 优化:rabbitmq.queueDeclareDurable 的配置默认设置为 false

  • 优化:对 QuietlyUtil 的方法进行重命名优化

  • 优化:ValidErrorRender 输出的 message 不带有 fieldName 信息

  • 优化:升级 Jfinal 等依赖到最新版本

  • 优化:JbootModel.findByColumn 当传入 null 值 value 时,直接返回 null

  • 优化:Model 保存和之前版本一致的行为,只允许绑定到一个数据源

  • 优化:当 Model 配置指定数据源,但数据源不存在的时候,给出更为明确的错误提示

  • 优化:Rabbitmq 添加自由开启队列和广播的开关,默认全部开启

  • 优化:重构 CORS 模块,使之代码可以用户模块里进行 "复用"

  • 修复: HttpUtil 在 put 请求时,某些情况下无法正常提交数据的问题

  • 修复:@Cacheput() 注解在 Controller 上无效的问题



评论区

海哥

2022-04-01 14:46

几乎任何复杂的 JSON 内容,都通过 JsonUtil 可以一行代码解析得到结果。

山东小木

2022-04-01 16:57

@海哥 基于fastJson还是jackson

海哥

2022-04-01 17:51

zzutligang

2022-04-03 14:32

@海哥 JsonUtil这个类使用场景是啥,和直接用fastjson解析json字符串后取值有什么区别呢?

海哥

2022-04-04 09:10

@zzutligang JsonUtil 本身就是基于 fastjson 的,目的是简化 json 解析。可能用 fastjson 几十行、上百行代码。JsonUtil 一行搞定。

北流家园网

2022-04-05 09:02