com.alibaba.fastjson.JSONException: can not cast to JSONObject

FastJson解析字符串一直报错

com.alibaba.fastjson.JSONException: can not cast to JSONObject,即转换JsonObject的时候一直失败。

这种情况下有两种原因:

  • 要解析的数据格式不对
  • 要解析的数据包含转义字符

第一种情况很好解决,在网上找个json验证工具修改成合适的格式即可。安利一个:在线解析json工具

第二种情况需要去掉转义字符,之后才能被FastJson等工具所解析。接下来复现一下错误场景并提供解决办法。

我把出现错误的数据打印到控制台然后复制出来解析发现是成功的,因为这时候jvm已经自动帮我们去掉了转义字符。

“{“status”:0,“message”:“操作成功”,“data”:{“page”:1,“pagesize”:5,“pagecount”:1,“count”:1,“hasmoving”:0,“tipmsg”:”",“list”:[{“is_haiwai”:0,“roomid”:389429,“step”:“11111111”,“status”:1,“status_msg”:“在线”,“status_reason”:"[审核通过]",“valid_reason”:" 请上传房源备案资料。",“title”:“6号线常营地铁站附近一居室”,“subtitle”:“6号线温馨卧室”,“country”:"",“province”:“北京”,“city”:“北京”,“area”:“朝阳区”,“street”:“常营街道”,“xiaoqu”:“阳光富力美园”,“build”:“11”,“door”:“102”,“price”:599.00,“sameroom”:2,“unit”:“套”,“adddate”:“2019-08-21”,“cover”:“https://assets.muniao.com/UploadFiles/root/room/389429/thumb/ff7bbb18801a40f8b7dc52bad57f7b73.jpg_610_384.jpg”,“image_count”:5,“tonight”:0,“istop”:0,“iswindow”:0,“iswindow_msg”:"",“lng”:116.613057,“lat”:39.933898,“status_remark”:“编辑房源位置、房间描述、床型信息、入住人数、户型、房间照片需重新审核,审核期间房源不下线,审核期间房源信息处于锁定状态,审核结束后方可再次编辑。在此期间订房的房客,需按审核前的条件接待。”,“valid_msg”:“未认证”,“ifRelate”:false,“relateRivals”:[],“lastSyncTime”:"",“ifHaveSynced”:false,“ifSyncing”:false}],“banner”:[{“type”:1,“msg”:“发布房源指南”,“url”:“https://mp.weixin.qq.com/s/v3G0xqG-a9rBXYRdDegzmg”,“img”:“https://assets.muniao.com/UploadFiles/appimg/fd/ios_zhinan.png”,“img_and”:“https://assets.muniao.com/UploadFiles/appimg/fd/and_zhinan.png”},{“type”:1,“msg”:“一键搬房”,“url”:“https://m.muniao.com/MoveHouse/?uid=3018377&zend=292F0F7772CA81636B0FBEB1EE01B6DA1F8D7225C1FE22E02682A937248CD676D52BBA90BB7715BBDED0EF4234479DE2”,“img”:“https://assets.muniao.com/UploadFiles/appimg/fd/bannar_moving_ios.png”,“img_and”:“https://assets.muniao.com/UploadFiles/appimg/fd/bannar_moving_android.png”},{“type”:1,“msg”:"",“url”:“https://mp.weixin.qq.com/s/VwCZLXGbv_1QNd6mrs3prQ”,“img”:“https://assets.muniao.com/UploadFiles/appimg/ios_banner1.png”,“img_and”:“https://assets.muniao.com/UploadFiles/appimg/and_banner1.png”},{“type”:1,“msg”:"",“url”:“https://m.muniao.com/MoveHouse/OMC/?type=2”,“img”:“https://assets.muniao.com/assets2/2018/banner/fd_ios_banner_omc.png”,“img_and”:“https://assets.muniao.com/assets2/2018/banner/fd_android_banner_omc.png”}]}}"

错误数据(包含转义字符)
“{“status”:0,“message”:“操作成功”,“data”:{“page”:1,“pagesize”:5,“pagecount”:1,“count”:1,“hasmoving”:0,“tipmsg”:”",“list”:[{“is_haiwai”:0,“roomid”:389429,“step”:“11111111”,“status”:1,“status_msg”:“在线”,“status_reason”:"[审核通过]",“valid_reason”:" 请上传房源备案资料。",“title”:“6号线常营地铁站附近一居室”,“subtitle”:“6号线温馨卧室”,“country”:"",“province”:“北京”,“city”:“北京”,“area”:“朝阳区”,“street”:“常营街道”,“xiaoqu”:“阳光富力美园”,“build”:“11”,“door”:“102”,“price”:599.00,“sameroom”:2,“unit”:“套”,“adddate”:“2019-08-21”,“cover”:“https://assets.muniao.com/UploadFiles/root/room/389429/thumb/ff7bbb18801a40f8b7dc52bad57f7b73.jpg_610_384.jpg”,“image_count”:5,“tonight”:0,“istop”:0,“iswindow”:0,“iswindow_msg”:"",“lng”:116.613057,“lat”:39.933898,“status_remark”:“编辑房源位置、房间描述、床型信息、入住人数、户型、房间照片需重新审核,审核期间房源不下线,审核期间房源信息处于锁定状态,审核结束后方可再次编辑。在此期间订房的房客,需按审核前的条件接待。”,“valid_msg”:“未认证”,“ifRelate”:false,“relateRivals”:[],“lastSyncTime”:"",“ifHaveSynced”:false,“ifSyncing”:false}],“banner”:[{“type”:1,“msg”:“发布房源指南”,“url”:“https://mp.weixin.qq.com/s/v3G0xqG-a9rBXYRdDegzmg”,“img”:“https://assets.muniao.com/UploadFiles/appimg/fd/ios_zhinan.png”,“img_and”:“https://assets.muniao.com/UploadFiles/appimg/fd/and_zhinan.png”},{“type”:1,“msg”:“一键搬房”,“url”:“https://m.muniao.com/MoveHouse/?uid=3018377\u0026zend=292F0F7772CA81636B0FBEB1EE01B6DA1F8D7225C1FE22E02682A937248CD676D52BBA90BB7715BBDED0EF4234479DE2”,“img”:“https://assets.muniao.com/UploadFiles/appimg/fd/bannar_moving_ios.png”,“img_and”:“https://assets.muniao.com/UploadFiles/appimg/fd/bannar_moving_android.png”},{“type”:1,“msg”:"",“url”:“https://mp.weixin.qq.com/s/VwCZLXGbv_1QNd6mrs3prQ”,“img”:“https://assets.muniao.com/UploadFiles/appimg/ios_banner1.png”,“img_and”:“https://assets.muniao.com/UploadFiles/appimg/and_banner1.png”},{“type”:1,“msg”:"",“url”:“https://m.muniao.com/MoveHouse/OMC/?type=2”,“img”:“https://assets.muniao.com/assets2/2018/banner/fd_ios_banner_omc.png”,“img_and”:“https://assets.muniao.com/assets2/2018/banner/fd_android_banner_omc.png”}]}}"

发现数据错误原因确实是因为转义字符造成的,接下来只要去掉转义字符即可,使用apache的工具类可以解决,如下:

content = StringEscapeUtils.unescapeJava(content);

通过StringEscapeUtils.unescapeJava(content)处理即可。

如果你遇到了其他的问题或者你也和我一样对技术充满热情, 欢迎随时与我交流! wechat: s13037657871

你可能感兴趣的:(BUG)