JSON经典异常:org.json.JSONException: Unterminated string at character
异常情景:
JSON数据格式进行解析;
出现异常完整信息如下:
06-12 13:08:09.273: W/System.err(31618): org.json.JSONException: Unterminated object at character 133 of {weatherinfo:{city:北京,cityid:101010100,temp:9,WD:西南风, WS:2级,SD:22%,WSE:2,isRadar:1,Radar:JC_RADAR_AZ9010_JB,njd:暂无实况,qy:1014,time:10:45}}
at org.json.JSONTokener.syntaxError(JSONTokener.java:451)
at org.json.JSONTokener.nextString(JSONTokener.java:219)
at org.json.JSONTokener.nextValue(JSONTokener.java:316)
at org.json.JSONObject.<init>(JSONObject.java:206)
at org.json.JSONTokener.nextValue(JSONTokener.java:319)
at org.json.JSONArray.<init>(JSONArray.java:126)
at org.json.JSONTokener.nextValue(JSONTokener.java:323)
at org.json.JSONObject.<init>(JSONObject.java:206)
at org.json.JSONObject.<init>(JSONObject.java:327)
at cn.eshore.statis.util.AndroidServletTest.main(AndroidServletTest.java:74)
经过测试得出结论:
发送JSON数据格式不正确,
即:手机终端那边 抛出的异常信息然后直接放到Json字符串中,而异常信息里面有多个换行或者空格以及特殊字符,然后再通过上报接口传送到Java这边,接着Java这边解析时导致解析json报异常 。
分析过程:
这是打印的log信息,可以看到去除了双引号,看到最后 time:10:45 解析的结果出现了,格式问题。。
06-12 13:08:09.273: E/blueberry(31618): {weatherinfo:{city:北京,cityid:101010100,temp:9,WD:西南风, WS:2级,SD:22%,WSE:2,isRadar:1,Radar:JC_RADAR_AZ9010_JB,njd:暂无实况,qy:1014,time:10:45}}
错误原因:
由于解析格式出现错误,特殊字符出现导致,所以避免json中出现特殊字符。
解决方法:
规范化数据格式;