Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用可解码(嵌套数组)解析不同的JSON_Json_Swift4_Decodable - Fatal编程技术网

使用可解码(嵌套数组)解析不同的JSON

使用可解码(嵌套数组)解析不同的JSON,json,swift4,decodable,Json,Swift4,Decodable,我正在用NiceHash api开发一个应用程序。我必须处理的JSON如下所示: { "result":{ "addr":"37ezr3FDDbPXWrCSKNfWzcxXZnc7qHiasj", "workers":[ [ "worker1", { "a":"45.7" }, 9, 1, "32", 0, 14 ], [ "worker1", { }, 5, 1, "100

我正在用NiceHash api开发一个应用程序。我必须处理的JSON如下所示:

 {
    "result":{
        "addr":"37ezr3FDDbPXWrCSKNfWzcxXZnc7qHiasj",
        "workers":[
                    [ "worker1", { "a":"45.7" }, 9, 1, "32", 0, 14 ],
                    [ "worker1", { }, 5, 1, "100000", 0, 22 ],
        ]
        "algo":-1
    },
    "method":"stats.provider.workers"
}
为了分析这些结构

struct Root: Decodable {
    var result: WorkersResult?
    var method: String?
}

struct WorkersResult: Decodable {
    var addr: String?
    var workers: [Workers]?
    var algo: Int?
}

struct Workers: Decodable {
    var worker: [Worker]?
}

struct Worker: Decodable {
    var name: String?
    var hashrate: Hashrate?
    var time: Int?
    var XNSUB: Int?
    var difficult: String?
    var reject: Int?
    var algo: Int?
}

struct Hashrate: Decodable {
    var rate: String?
}
响应等于零,我无法理解我做错了什么,我理解问题是解析worker数组,因为如果我对worker进行了注释,那么响应等于一些有效数据。
谢谢你的帮助

由于逗号放错了位置,JSON实际上是无效的。通过JSON验证器运行它,现在我的意思是什么

无论如何,由于
工作者
(单数)被编码为数组,因此需要为其提供自定义解码器<代码>工作者(复数)是不必要的

struct Root: Decodable {
    var result: WorkersResult?
    var method: String?
}

struct WorkersResult: Decodable {
    var addr: String?
    var workers: [Worker]?
    var algo: Int?
}

struct Worker: Decodable {
    var name: String?
    var hashrate: Hashrate?
    var time: Int?
    var XNSUB: Int?
    var difficult: String?
    var reject: Int?
    var algo: Int?

    init(from decoder: Decoder) throws {
        var container = try decoder.unkeyedContainer()
        name      = try container.decodeIfPresent(String.self)
        hashrate  = try container.decodeIfPresent(Hashrate.self)
        time      = try container.decodeIfPresent(Int.self)
        XNSUB     = try container.decodeIfPresent(Int.self)
        difficult = try container.decodeIfPresent(String.self)
        reject    = try container.decodeIfPresent(Int.self)
        algo      = try container.decodeIfPresent(Int.self)
    }
}

struct Hashrate: Decodable {
    var rate: String?

    private enum CodingKeys: String, CodingKey {
        case rate = "a"
    }
}
用法:

let jsonData = """
{
    "result":{
        "addr":"37ezr3FDDbPXWrCSKNfWzcxXZnc7qHiasj",
        "workers":[
                    [ "worker1", { "a":"45.7" }, 9, 1, "32", 0, 14 ],
                    [ "worker1", { }, 5, 1, "100000", 0, 22 ]
        ],
        "algo":-1
    },
    "method":"stats.provider.workers"
}
""".data(using: .utf8)!

let r = try JSONDecoder().decode(Root.self, from: jsonData)
print(r)

你所有的房产都是期权,这有什么原因吗?例如,JSON中是否会缺少其中任何一个?