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解析異常解決方案