天天看點

android報錯 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $

      我在使用retrofit和gson配合時,出現了這個問題,疑惑中亂七八糟瞎搞了一個下午沒有解決。期間懷疑gson解析不能使用泛型(因為我的解析使用了泛型),後來又覺得可能是我的關鍵字正好是解析器的某個關鍵字導緻的異常,也打算過自定義gson的解析過程,其實這些都不是。

        第二天才搞明白,真正的問題是我的資料結構有問題,或者說我的解析出現了問題。

        例如下面json字元串:

        {"code":1,"info":"success","results":{"id":"1","name":"hehe"}}

        results對應的應該是一個實體類,如果這個時候想把他解析為string或者list就會出現異常。

        如果參考使用gsonform處理後的資料模型,幾乎不會出現問題;加入result後面的内容可能在請求時會因為某些原因會存在格式上的變化,這個時候就有出現該異常的風險。gson中,關鍵字後面出現""引起來的内容将會被隻認為是string,“{}”隻被認為是類,“[]”隻被認為是list,這個幾乎是強制性的。

        就是說如果你的實體預計是擷取string的變量,但是關鍵字後面對應的卻出現了“{”或“[”,那麼這個轉換将被認為是錯誤的,抛出異常。

        解決辦法:背景輸出穩定的gson格式。