Swift ObjectMapper映射具有多种类型的值的数组-数字和复杂对象混合

问题描述

我有一个要使用Swift ObjectMapper解析的JSON对象

{
    "id": 1,"jsonrpc": "2.0","result": [
        0,{
            "data": {
                "username": "myuser"
            },"expires": 300,"timeout": 300,"ubus_rpc_session": "some_value"
        }
    ]
}

我不知道如何正确解析具有混合内容的内部数组,特别是这部分:

[ 0,{ /* ... */ } ]

我试图以各种方式解决它,但是还没有找到可行的解决方案。我怀疑StaticMappable可能有用,并且我已将其用于其他多态解析,但从未在数组项之一是数字的情况下使用。

任何帮助将不胜感激。

解决方法

恐怕使用ObjectMapper映射此数组的唯一方法是在[Any]中:

class Result: Mappable {
    var id: Int?
    var jsonrpc: String?
    var result: [Any]?
    
    required init?(map: Map) {}
    
    func mapping(map: Map) {
        id <- map["id"]
        jsonrpc <- map["jsonrpc"]
        result <- map["result"]
    }
}

这样,对于这个特定的json响应,数组的第一个元素将为Int类型,第二个元素将为[String: Any]类型。

当然,每当您尝试访问此数组的元素时,这都包括类型转换过程。 (这很糟糕)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...