Parse Json在开头有一个定义

时间:2017-12-14 16:56:55

标签: json swift codable

我想用这种结构解析一个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 =“道琼斯”,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()

但当然它会返回一个错误,因为结构与json文件不匹配。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

创建一个像这样的结构。

//Vuex
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

const store = new Vuex.Store({
    state: {
        config: 'config',

    },
    getters: {
        config: state => state.config
    },
});

export default store

并解码

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)
}