首页 > 解决方案 > 从改造 Json 到 Gson Android Kotlin/Java 的动态响应

问题描述

我有来自rest API的动态json格式,如下所示:

{
    "data": {
        "response_code": "success",
        "value": {
            "Table": [
                {
                    "id": 5,
                    "username": "blahblah",
                    "password": "blahblah",
                    "role": 2,
                    "email": "blah@tes.com",
                    "tanggal_buat": "2019-01-01T00:00:00"
                }
            ]
        }
    },
    "meta": {
        "http_status": 200
    }
}

对象“值”具有对象数组名称“表”。表可以根据我的查询动态包含来自我的数据库的值。所以,有时 json 格式会改变,例如:

{
    "data": {
        "response_code": "success",
        "value": {
            "Table": [
                {
                    "id_product": 44,
                    "product": "blahblah",
                    "lot": "blahblah",
                    "qty": 2,
                }
            ]
        }
    },
    "meta": {
        "http_status": 200
    }
}

如何接受 json 值并使用“表”的不同子类直接分配给 gson

我尝试改造并使用 kotlin

override fun onResponse(call: Call<MainResp>, response: Response<MainResp>) {
                    mainResponse : MainResp = response.body()
                }

标签: javaandroidkotlinretrofit

解决方案


假设您有以下课程(使用诸如http://www.jsonschema2pojo.org/之类的东西):

class Value {
    List<Table> tables;
}

这里的“Table”类不能完全随机!
您需要定义“表”的可能类型,例如 Table1、Table2...TableN。

现在您可以Value使用通用类型T而不是 Table 更新类并编写自定义类型适配器:

class Value {
    List<T> tables;
} 

关于如何编写自己的类型适配器的教程之一是这里


推荐阅读