利用Kotlin與Gson解析Json轉換指定對象實體數據

1、Gson將Json數據轉換成指定對象

  • Gradle配置
   implementation 'com.google.code.gson:gson:2.8.6'
  • Maven配置
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

2、Json數據

{
    "code": 1, 
    "msg": "成功", 
    "data": {
        "id": "44ebb879c2bf4072bae4b927cffd9de4", 
        "createById": "admin", 
        "createTime": "2022-01-08 11:10:58", 
        "updateTime": "2022-01-08 11:10:58",  
        "title": "愛學習的蹭蹭的簡書", 
        "blogUrl": "https://www.jianshu.com/u/830d5fabc5ad", 
        "detail": "", 
        "authorName": "愛學習的蹭蹭"
    }
}

3、轉換的實體

  • ResponseVo 與DataVo類
data class ResponseVo(
    var code: Int,
    var msg: String,
    var data: DataVo
) {
}

data class DataVo(
    var id: String,
    var authorName: String,
    var createById: String,
    var title: String,
    var blogUrl: String,
    var updateTime: String,
    var createTime: String,
    var detail: String,
) {

}

4、代碼實現

import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

/**
 * 
 * 參考文章:https://juejin.cn/post/7049983952496361503
 */
open class JsonUtils() {
 
    /**
     * fromJson2List
     */
    inline fun <reified T> fromJson2List(json: String) = fromJson<List<T>>(json)

    /**
     * fromJson
     */
    inline fun <reified T> fromJson(json: String): T? {
        return try {
            val type = object : TypeToken<T>() {}.type
            return Gson().fromJson(json, type)
        } catch (e: Exception) {
            println("try exception,${e.message}")
            null
        }
    }
}

5、main代碼測試

fun main() {
  
    var json :String ="{\n" +
            "    \"code\": 1, \n" +
            "    \"msg\": \"成功\", \n" +
            "    \"data\": {\n" +
            "        \"id\": \"44ebb879c2bf4072bae4b927cffd9de4\", \n" +
            "        \"createById\": \"admin\", \n" +
            "        \"createTime\": \"2019-10-25 11:10:58\", \n" +
            "        \"updateTime\": \"2019-10-25 11:10:58\",  \n" +
            "        \"title\": \"愛學習的蹭蹭的簡書\", \n" +
            "        \"blogUrl\": \"https://www.jianshu.com/u/830d5fabc5ad\", \n" +
            "        \"detail\": \"\", \n" +
            "        \"authorName\": \"愛學習的蹭蹭\"\n" +
            "    }\n" +
            "}"

    var responseVo = JsonUtils().fromJson<ResponseVo>(json)

    //輸出結果
    println(responseVo?.data?.authorName)
    println(responseVo?.data?.blogUrl)
    println(responseVo?.data?.detail)

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