Android中由于BOM頭導致Json解析異常解決方案


Json數據時發現報
org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject 錯誤。
發現UTF-8有bom頭問題。

就去看了一下bom才發現原來真是這樣
在看源碼時發現原來android4.0的json包已經對這個問題做了處理。

看下代碼:


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;
    }

問題很簡單了在網絡層將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頭導致Json解析異常解決方案