关于net.sf.json.JSONObject的一个坑

String str = "[192.168.119.251]的终端发生[严重]报警. 告警内容:使用人为[chengpei],IP为[192.168.119.251]的设备发生[同时连通内外网,以间隔60秒探测了158次,成功113次,持续10528秒。]报警,级别为[严重]";

对于上面的字符串, 如果将该字符串放入到net.sf.json.JSONObjec对象中, net.sf.json.JSONObject在放入内容的时候有个maybeJSON的方法判断该字符串是否为JSON对象,方法如下:

,而改字符串正好是以"["开头以"]"结尾, 满足条件, 该方法返回true, 这样net.sf.json.JSONObjec就会将该字符串视为JSON数组, 后续再调用JSONArray的解析方法, 而String解析成JSONArray时的方法如下:

, 该方法从String开始遍历解析, 在找到"]"之后就直接结束解析返回解析到的内容, 这样第一个"]"后面的内容全部被丢弃了! 导致放入 net.sf.json.JSONObject里的内容就是一个["192.168.119.251"]的数组!

对于放进去之后的值,我的期望应该是一个完整的字符串, 而实际得到的确是一个不完整的字符串数组! 

太坑了, 这个问题找了半天, 接口调用收到的参数死活就是不对, 放进去之前打印的日志都是正确的, 放进去之后打印的json内容就不对了!

当我换成com.alibaba.fastjson.JSONObject之后, 得到了我期望的结果!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部