android Gson解析未知格式Json內容問題

在Gson中,我們解析json裏的固定字段非固定內容通常是通過泛型<T>封裝

class Result<T>

{

public String type;

public T data;

}

這種方式我們在使用時,必須先定義泛型的類型才能去解析json字符串;

但是,實際需求中,我們可能會出現我們的請求是確認的,但是返回的字段內容是不確定的,比如說data可能是個字符串,可能是json對向,如果是用泛型,我們必須在解析之前指定類型,可是這裏我們必須先解析到type才能判斷data的類型,導致無法解析;

於是我嘗試將data轉爲字符串,採用String類型來接收,根據type再來轉換,這個思路肯定是沒問題的,但是測試後發現,程序直接崩潰了……沒錯,崩了,gson不允許我們將json對象採用String來接收;

經過各種查證,發現可以使用Object來接收,emmm...  

經過debug測試發現,接收到的Json對象解析後的Object的類型爲

LinkedTreeMap

使用字符串和數字解析出來類型也都是正確的,我們就可以直接使用data來轉換類型使用了;

對於LinkedTreeMap我進行了toString,發現並不能轉回Json字符串,看了下源碼,發現它重寫的toString方法


    @Override public String toString() {
      return key + "=" + value;
    }

嘗試直接通過gson對data轉字符串,

gson.toJson(test.data)

能獲取到正確的json字符串

至此,我們可以通過Object先將未知類型的格式接收,再根據外層數據的邏輯來處理data,或者直接判斷data的類型,直接進行操作,無論是直接使用LinkedTreeMap,還是轉爲Json再處理都可以;

之前遇到這種未知格式的解析我都是寫其它解析工具來解析,這次嘗試直接採用json來解析,網上搜索都說Gson只能解析固定格式,這次對Object方式解析獲得了意外之喜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章