在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的 以后使用的是时候要注意了!!!
分割线-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------分割线
那么问题来了, 我们应该如何校验一个字符串是否是可以正确序列化的字符串呢?
标签:fastjson,false,JSONValidator,记录,json,格式,validate,true From: https://www.cnblogs.com/loveCrane/p/17769822.html