最近在開發(fā)中,我遇到了一個很奇怪的問題:無法解析JSON。在我的代碼中,我將一個JSON格式的字符串傳遞到了解析JSON的函數(shù)中,但是在運行時,我收到了一個類似于“Cannot parse JSON”的錯誤。我仔細(xì)研究了代碼,并嘗試了許多不同的解決方案,但似乎無法解決這個問題。
為了更好地理解這個問題,讓我們來看一下我的代碼:
try { JSONObject jsonObject = new JSONObject(jsonString); } catch (JSONException e) { Log.e(TAG, "Cannot parse JSON", e); }
在這段代碼中,我嘗試將一個JSON格式的字符串解析為一個JSONObject對象。如果解析失敗,我將記錄日志并拋出一個異常。但是在我的真實情況下,我得到了這個異常:
org.json.JSONException: Value <br> of type java.lang.String cannot be converted to JSONObject
這個異常似乎表明,在我的JSON格式字符串中,有一個無法識別的HTML標(biāo)記“ <br> ”,因此無法成功解析JSON。但是,在我檢查JSON字符串時,我并沒有發(fā)現(xiàn)任何HTML標(biāo)記。為了消除這種可能性,我嘗試使用一個更簡單的JSON字符串進(jìn)行測試:
String testJsonString = "{ \"name\": \"John Doe\", \"age\": 30 }"; try { JSONObject jsonObject = new JSONObject(testJsonString); } catch (JSONException e) { Log.e(TAG, "Cannot parse JSON", e); }
我沒有在這個簡單的JSON字符串中發(fā)現(xiàn)任何問題,但我依舊收到了“Cannot parse JSON”的異常。這個問題還真是奇怪:
org.json.JSONException: Value { "name": "John Doe", "age": 30 } of type java.lang.String cannot be converted to JSONObject
終究,我找到了問題的原因。我犯了一個小錯誤,我沒有調(diào)用trim()函數(shù)來刪除JSON字符串周圍的空格。因為我的JSON字符串來自服務(wù)器響應(yīng),其中包含空格,因此我需要在解析JSON之前刪除這些空格:
String jsonString = serverResponseString.trim(); try { JSONObject jsonObject = new JSONObject(jsonString); } catch (JSONException e) { Log.e(TAG, "Cannot parse JSON", e); }
這個小小的修復(fù)讓我能夠成功解析JSON了。所以,請記住:在解析JSON之前,請使用trim()函數(shù)刪除JSON字符串周圍的空格。