gpt4 book ai didi

json - Codable 与 swiftyjson。如何将我的代码转换为 Codable(值数组)

转载 作者:搜寻专家 更新时间:2023-10-31 22:55:52 26 4
gpt4 key购买 nike

很多人告诉我,codable 比使用 swiftyjson 好得多,所以我正在尝试一下。我想将此 JSON 的返回值 https://api.gdax.com/products/BTC-USD/book?level=2 转换为两个数组(一个用于询问,一个用于出价) .我还想要单独变量中的序列值。这就是我使用 swiftyjson 的方式。这将如何使用 codable 完成?我为此使用了 alamofire。

这是 Alamofire 调用,但它非常简单且无关紧要。

Alamofire.request(url, method: .get).responseJSON {(response) in
switch response.result{
case .success(let value):

这里是重要的代码:

let swiftyJson = JSON(value)

guard let sequenceNum = Int(swiftyJson["sequence"].stringValue) else {return}

let askOrders = swiftyJson["asks"].arrayValue
let bidOrders = swiftyJson["bids"].arrayValue

let askSideBook = askOrders.map({ (obj) -> (price:Double, size:Double, numOrders:Double) in
let orderArray = obj.arrayValue

let price = orderArray[0].doubleValue
let size = orderArray[1].doubleValue
let numOrders = orderArray[2].doubleValue

return (price:price, size:size, numOrders:numOrders)
})

let bidSideBook = bidOrders.map({ (obj) -> (price:Double, size:Double, numOrders:Double) in
let orderArray = obj.arrayValue

let price = orderArray[0].doubleValue
let size = orderArray[1].doubleValue
let numOrders = orderArray[2].doubleValue

return (price:price, size:size, numOrders:numOrders)
})

这是缩短的 JSON,但它会让您了解一般格式。如您所见,第一个值是价格,第二个是尺寸,第三个是订单数。价格和尺寸都作为字符串返回,但我需要它们作为 double 值。

{
"sequence": 4448910440,
"bids": [
[
"9679.96",
"9.52707734",
38
],
[
"9679.94",
"0.12631007",
3
],...
],
"asks": [
[
"9679.97",
"45.51632996",
10
],
[
"9679.98",
"1.31689466",
1
],...
]
}

我也听说过https://github.com/Otbivnoe/CodableAlamofire .这是推荐的东西吗?

这是我目前所拥有的,但我不知道如何通过要价和出价数组中每个项目的索引来处理数组。

struct OrderBookItems: Codable {
let bidOrderBook: [DataPoints]
let askOrderBook: [DataPoints]
private enum CodingKeys: String, CodingKey {
case bidOrderBook = "bid"
case askOrderBook = "ask"
}
}

最佳答案

codingKeys 的值是错误的(复数形式),您需要第二个提供自定义初始化程序的结构来解码数组

struct OrderBookItems: Decodable {
let bidOrderBook: [DataPoint]
let askOrderBook: [DataPoint]
private enum CodingKeys: String, CodingKey {
case bidOrderBook = "bids"
case askOrderBook = "asks"
}
}

struct DataPoint : Decodable {
let price : Double
let size : Double
let numOrders : Int

init(from decoder: Decoder) throws {
var container = try decoder.unkeyedContainer()
price = Double(try container.decode(String.self)) ?? 0.0
size = Double(try container.decode(String.self)) ?? 0.0
numOrders = try container.decode(Int.self)
}
}

关于json - Codable 与 swiftyjson。如何将我的代码转换为 Codable(值数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com