解析Json开头有一个定义

Parse Json with a definition at the beginning

我想用这种结构解析 Json 文件:

{"x":"exchange","b":"usd","ds":["exchange","avgp","mcap","ppc7D","ppc12h","ppc4h","ppc24h"],"data":[["Dow Jones","16360.447","273.89B","6.62","2.14","-0.59","-1.99"],["Dax","877.422","6.80B","38.15","-7.4","-4.44","-4.12"],["nikkei","30.077","2.96B","24.22","-2.3","-4.02","-4.95"],["ATX","281.509","15.29B","214.97","-5.48","-4.58","-10.77"]]}

我不知道如何解析 Json 没有定义的文件,例如: exchange = "Dow Jones", avgp = 16360.477" 等。 而且我在网上找不到任何东西。

我的代码如下所示:

let json = """
{"x":"exchange","b":"usd","ds":["exchange","avgp","mcap","ppc7D","ppc12h","ppc4h","ppc24h"],"data":[["Dow Jones","16360.447","273.89B","6.62","2.14","-0.59","-1.99"],["Dax","877.422","6.80B","38.15","-7.4","-4.44","-4.12"],["nikkei","30.077","2.96B","24.22","-2.3","-4.02","-4.95"],["ATX","281.509","15.29B","214.97","-5.48","-4.58","-10.77"]]}
""".data(using: .utf8)!


struct JsonWebsocket: Decodable {
    let exchange: String
    let avgp: String
    let mcap: String
    let ppc7D: String
    let ppc12h: String
    let ppc4h: String
    let ppc24h: String

    init(exchange: String, avgp: String, mcap: String, ppc7D: String, ppc12h: String, ppc4h: String, ppc24h: String) {
        self.exchange = exchange
        self.avgp = avgp
        self.mcap = mcap
        self.ppc7D = ppc7D
        self.ppc12h = ppc24h
        self.ppc4h = ppc4h
        self.ppc24h = ppc24h
    }
}

func fetchJson() -> [String:JsonWebsocket] {
    let jsonCoinsDecode = json
    let coinDecode = JSONDecoder()
    let output = try! coinDecode.decode([String:JsonWebsocket].self, from: jsonCoinsDecode)
    return output
}

let array = fetchDataTradingPairs()

但这当然是 returns 一个错误,因为结构与 json 文件不匹配。

有谁知道如何解析这个json?

谢谢!

创建一个这样的结构。

struct JsonWebsocket: Decodable {
    let x: String
    let b: String
    let ds: [String]
    let data: [[String]]
}

并解码

do {
    let coinDecode = JSONDecoder()

    let output = try coinDecode.decode(JsonWebsocket.self, from: json)
    print(output.data)
}
catch let error{
    print(error.localizedDescription)
}

替代原生

否则,创建自定义

struct JsonWebsocket: Decodable {
    let exchange: String
    let avgp: String
    let mcap: String
    let ppc7D: String
    let ppc12h: String
    let ppc4h: String
    let ppc24h: String

    init(json: [String]) {
        self.exchange = json[0]
        self.avgp = json[1]
        self.mcap = json[2]
        self.ppc7D = json[3]
        self.ppc12h = json[4]
        self.ppc4h = json[5]
        self.ppc24h = json[6]
    }
}

do {
    let jsonData = try JSONSerialization.jsonObject(with: json, options: []) as? [String: Any]

    var jsonWebsocket: [JsonWebsocket] = []
    if let data = jsonData!["data"] as? [[String]] {
        for d in data {
            jsonWebsocket.append(JsonWebsocket(json: d))
        }
    }

    print(jsonWebsocket.count)
}
catch let error{
    print(error.localizedDescription)
}