【问题标题】:Parse json file with variable length in Swift [duplicate]在Swift中解析具有可变长度的json文件[重复]
【发布时间】:2021-10-26 01:44:41
【问题描述】:

我想从 API 解析一个 json 文件。我从 API 得到这个 json(只是一个例子,我可以轮询我喜欢的任何硬币):

{
  "ethereum": {
    "usd": 3228.32,
    "usd_market_cap": 378715635680.9308,
    "usd_24h_vol": 20454034072.297222,
    "usd_24h_change": -0.0033300457476910226,
    "last_updated_at": 1629930233
  },
  "bitcoin": {
    "usd": 49100,
    "usd_market_cap": 923292263228.3533,
    "usd_24h_vol": 33433401406.230736,
    "usd_24h_change": 1.4329298489913256,
    "last_updated_at": 1629930192
  }
}

所以我做了两个结构来匹配json:

struct Coindata: Codable {
    var bitcoin: Price?
    var ethereum: Price?
}

struct Price: Codable {
    var usd: Double?
    var usd_market_cap: Double?
    var usd_24h_vol: Double?
    var usd_24h_change: Double?
    var last_updated_at: Int?
}

以上工作正常,我可以读出不同的字段。但我不希望它是一组固定的硬币,并在“Coindata”结构中为我想要轮询的每个硬币写一个新成员。有没有一种好方法可以使这种动态化?例如,一个接收数组字符串的函数,我可以在其中写入我想要的硬币。像这样:

array = ["bitcoin","ethereum","cardano","tether"]
pollCoinData(array)

我这样做是为了解析:

let decoder = JSONDecoder()
let coinData = try decoder.decode(Coindata.self, from: data!)

感谢您的任何建议!

【问题讨论】:

  • @ElTomato 这不是很有帮助,你是什么意思?

标签: json swift xcode api parsing


【解决方案1】:

除了CoinData 结构,您可以解码一个字典,其中加密货币的名称作为键,Price 对象作为值。

let coinData = try decoder.decode([String: Price].self, from: data!)

例如,现在要获取比特币的Price,您可以这样做:

if let bitcoinPrice = coinData["bitcoin"] {
    // ...
} else {
    // there is no price info about bitcoin in the JSON!
}

【讨论】:

  • 正是我需要的,谢谢!欣赏它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多