1. 程式人生 > >解析JSON-只解析成為Object 而不是bean

解析JSON-只解析成為Object 而不是bean

背景

有時候從後臺獲取到資料,但並不是所有的資料都是有必要解析的,有的只是後臺傳遞給前端,再做其它請求的時候,又將資料原封不動的時候返回給後臺。這個資料有時候只是key相同,但是實際的值相差很大的。當我們如果是借用諸如Gson來解析的時候就會出問題。

   {
        "type":"chart",
        "title":"",
        "subTitle":"",
        "createDate":"2018-09-18 11:12:49",
        "remarks":"2018-9-18-日報",
        "loadUrl":"http://xiaohe/chart-container.html",
        "content":"2018-9-18-日報",
        "gotoParams":{
            "designId":"824797985020462835",
            "id":"548847611631325018"
        }
    }

如上圖中的json ,其中的gotoParams就是之後會返回給伺服器端資料。如果要解析,那麼一般會定義兩個bean,其中一個是GotoParams 。但是問題是gotoParams中的資料是不確定的,有時候三個,有時候四個。這樣就沒有辦法定義準確的bean

我們先看看我先定義的兩種錯誤bean(使用的kotlin定義的資料類)

1、定義gotoParams為String

data class ChartMessage(val type: String, val title: String, val subTitle: String,
                    val createDate: String?, val remarks: String, val loadUrl: String,
                    val content: String, val gotoParams: String)

這個時候解析報錯,說解析的對應的是一個object,而不是String

2、定義gotoParams為JSONObejct

data class ChartMessage(val type: String, val title: String, val subTitle: String,
                    val createDate: String?, val remarks: String, val loadUrl: String,
                    val content: String, val gotoParams: JSONObject)

這個時候,到是沒有報錯,只是對應的gotoParams 是空的字串。不符合

解決方案

data class ChartMessage(val type: String, val title: String, val subTitle: String,
                    val createDate: String?, val remarks: String, val loadUrl: String,
                    val content: String, val gotoParams: Any)

Any 是kotlin 中的基類, 對應的是java中的Object

做個記錄,一點一點積累

為什麼害怕改變,你在恐懼什麼?