JSON解析異常-org.json.JSONException: Expected a ':' after a key
問題場景
後端開發好介面,給發過來介面文件,於是開始開心的使用 GsonFormat 外掛 建實體了,然而轉換 JSON 時出錯。
錯誤現場截圖:
問題分析
JSON 轉換失敗一般有以下兩個原因:
JSON 格式有問題,檢查一下格式。
格式沒問題,仍然報錯,那就是編碼問題。例如你的 JSON 檔案頭裡帶有編碼字元(如utf-8等),讀取字串時 JSON 串是正常的,但是解析就有異常。
很顯然我格式沒問題,那就是編碼的問題了,但是我怎麼能確定編碼問題呢,於是有了下面神奇的一幕:
出現了問題,我百思不得其解得時候,我去 GsonFormt 這個外掛的 GitHub 上建立一個 issue,把我轉換出錯的 JSON 字串附上了,然後提交了上去。為了保險起見,提交之後我驗證了一下我的問題描述。於是我複製了 issue 上我提交的那段 JSON 字串,貼上轉換,發現竟然正常轉換了,正常了!!!! 震驚了我狹窄的認知世界。然而我使用介面文件中的同樣的一份JSON,轉換仍然失敗。
雖然上面發生的事情比較顯的我比較蠢,但是至少,可以現在定位問題了。目前有內容看起來一模一樣的兩份 JSON,一個轉換失敗,一個轉換正常。也是我用 UltraEdit 分別以 Hex 模式打開了兩份文字,結果如下:
正常轉換的文字:
轉換失敗的文字:
轉換失敗的文字,發現多了 Â
這個字元,仔細看的話,是所有空格轉換成了這個字元,於是定位到空格上面,發現全形空格會轉換為Â
。
現在真相大白了,全形空格就是導致 GsonFormat 轉換失敗的罪魁禍首。
問題解決
知道了真正的原因,問題就引刃而解了。
因為我們的介面是 word 文件給的,於是,我全域性替換了全形空格為半形空格,之後再複製貼上轉換就好了。
福利推薦
最後,給大家推薦一個好用的Android Studio 外掛,就是本文出現的 GsonFormat ,可以通過 JSON 字串自動轉換為實體物件,省時省力。超級方便,放個動圖感受一下~
戳這裡去看 GsonFormat 的 Github 倉庫 ,上面有詳細的使用說明,有問題可以搜尋 issue 解決或者建立 issue 求助,千萬別學我提這種搞笑的烏龍 issue ,笑哭自己。
歡迎關注博主的微信公眾號,快快加入哦,期待與你一起成長!