fastjson JSONValidator 的使用记录

发布时间 2023-10-17 16:33:28作者: loveCrane

在api的对接过程中,对方api总是会返回一些意想不到的格式回来, 虽然你们已经约定好了使用json的方式返回 !!

 在调用一个api接口的时候结果就像薛定谔的猫 是一个不确定的形态.

 按照我之前的操作逻辑

1判断结果空

if (StringUtils.isEmpty(result)) {
    return "结果空";
}

2判断结果 json格式

if (!JSONValidator.from(result).validate()) {
    return "结果非json格式";
}

3在判断json结果中的 关键字段如 success = true

此处代码忽略...

 

这样看起来似乎没有问题,直到今天偶然看到某个 api接口 返回的结果为 false;

然后通过了 第二个验证

在进行

JSONObject.parseObject(send.toString(), XXX.class);

时抛出了异常,json格式反序列化异常

 

问题的重点  为什么 JSONValidator.from("false").validate() == true

问题的重点  为什么 JSONValidator.from("false").validate() == true

问题的重点  为什么 JSONValidator.from("false").validate() == true

!!!

 

事实上, 我我对JSONValidator.from("false").validate() 有误解,  我理解的这段代码的含义是 判断这个字符串是否是正确的json格式

 

而实际的意思是  判断这个字符串是否是json 的格式 或json的 values的 格式

 

啥意思呢  简单的理解就是 json 有6中数据类型

出自: rfc-editor.org/rfc/rfc8259.txt

符合以上类型的都可以校验通过

 

借用网上的截图

 

JSONValidator.from(result).validate() 这里的result 符合json格式或者 json的values的数据格式 都是会返回true的  以后使用的是时候要注意了!!!

 

 

分割线-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------分割线

那么问题来了, 我们应该如何校验一个字符串是否是可以正确序列化的字符串呢?