Android中由于BOM頭導(dǎo)致Json解析異常解決方案
Json數(shù)據(jù)時(shí)發(fā)現(xiàn)報(bào)
org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject 錯(cuò)誤。
發(fā)現(xiàn)UTF-8有bom頭問題。
就去看了一下bom才發(fā)現(xiàn)原來真是這樣
在看源碼時(shí)發(fā)現(xiàn)原來android4.0的json包已經(jīng)對這個(gè)問題做了處理。
看下代碼:
public JSONTokener(String in) { // consume an optional byte order mark (BOM) if it exists if (in != null && in.startsWith("\ufeff")) { in = in.substring(1); } this.in = in; }而2.2的代碼:
public JSONTokener(String in) { this.in = in; }
問題很簡單了在網(wǎng)絡(luò)層將responseString過濾一下就好 不明白就去看一下utf-8 bom頭。
修改方法一:
String jsonString = getJsonString(); if (jsonString != null &&jsonString.startsWith("\ufeff")) { jsonString = jsonString.substring(1); }修改方法二:
String jsonString = getJsonString(); jsonString = jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}") 1);
原文鏈接:Android中由于BOM頭導(dǎo)致Json解析異常解決方案