1. 程式人生 > >JSON解析異常-org.json.JSONException: Expected a ':' after a key

JSON解析異常-org.json.JSONException: Expected a ':' after a key

問題場景

後端開發好介面,給發過來介面文件,於是開始開心的使用 GsonFormat 外掛 建實體了,然而轉換 JSON 時出錯。

錯誤現場截圖:

問題分析

JSON 轉換失敗一般有以下兩個原因:

  1. JSON 格式有問題,檢查一下格式。

  2. 格式沒問題,仍然報錯,那就是編碼問題。例如你的 JSON 檔案頭裡帶有編碼字元(如utf-8等),讀取字串時 JSON 串是正常的,但是解析就有異常。

很顯然我格式沒問題,那就是編碼的問題了,但是我怎麼能確定編碼問題呢,於是有了下面神奇的一幕:

出現了問題,我百思不得其解得時候,我去 GsonFormt 這個外掛的 GitHub 上建立一個 issue,把我轉換出錯的 JSON 字串附上了,然後提交了上去。為了保險起見,提交之後我驗證了一下我的問題描述。於是我複製了 issue 上我提交的那段 JSON 字串,貼上轉換,發現竟然正常轉換了,正常了!!!! 震驚了我狹窄的認知世界。然而我使用介面文件中的同樣的一份JSON,轉換仍然失敗。

雖然上面發生的事情比較顯的我比較蠢,但是至少,可以現在定位問題了。目前有內容看起來一模一樣的兩份 JSON,一個轉換失敗,一個轉換正常。也是我用 UltraEdit 分別以 Hex 模式打開了兩份文字,結果如下:

正常轉換的文字:

image

轉換失敗的文字:

image

轉換失敗的文字,發現多了 Â 這個字元,仔細看的話,是所有空格轉換成了這個字元,於是定位到空格上面,發現全形空格會轉換為Â

現在真相大白了,全形空格就是導致 GsonFormat 轉換失敗的罪魁禍首。

問題解決

知道了真正的原因,問題就引刃而解了。

因為我們的介面是 word 文件給的,於是,我全域性替換了全形空格為半形空格,之後再複製貼上轉換就好了。

福利推薦

最後,給大家推薦一個好用的Android Studio 外掛,就是本文出現的 GsonFormat ,可以通過 JSON 字串自動轉換為實體物件,省時省力。超級方便,放個動圖感受一下~

戳這裡去看 GsonFormat 的 Github 倉庫 ,上面有詳細的使用說明,有問題可以搜尋 issue 解決或者建立 issue 求助,千萬別學我提這種搞笑的烏龍 issue ,笑哭自己。


歡迎關注博主的微信公眾號,快快加入哦,期待與你一起成長!