【发布时间】:2018-04-16 19:36:14
【问题描述】:
我正在尝试使用包含动态键和动态数量值的货币汇率解析 JSON。输出取决于输入参数,例如基础货币和要比较的几种货币。
JSON 示例:
{
"USD_AFN": 70.129997,
"USD_AUD": 1.284793,
"USD_BDT": 82.889999,
"USD_BRL": 3.418294,
"USD_KHR": 4004.99952
}
,或者:
{
"EUR_CAD": 0.799997
}
另外,我应该能够更改基础货币和要比较的货币,以及更改要比较的货币数量。 我已经尝试过这个answer。
处理它的最佳方法是什么?
谢谢
其他信息
所以,我制作了没有初始化器的结构
struct CurrencyRate: Codable {
var results : [String:Double]
}
并试图对其进行解码
do { let results = try decoder.decode(CurrencyRate.self, from: dataToDecode) print(results) } catch { print("Error") }
我仍然收到错误消息。
最终,我只需要一组货币汇率(值)即可将其填充到表格视图中。
【问题讨论】:
-
我会保留字典(解码成
[String:Double]) -
我尝试使用这个结构
struct CurrencyRate: Codable { var results : [String:Double] init(results: [String:Double]) { self.results = results }和let results = try decoder.decode(CurrencyRate.self, from: dataToDecode),但它发现了一个错误。可能我的结构不适合这种情况? -
这是整个 JSON 吗?如果是,则代码应该可以工作。您不需要结构中的初始化程序,即使不符合
Codable -
是的,这是整个 JSON,但它可能包含任意数量的对象和任意键组合 (XXX_XXX)。所以,我在没有初始化器
struct CurrencyRate: Codable { var results : [String:Double] }的情况下创建了结构,并尝试对其进行解码do { let results = try decoder.decode(CurrencyRate.self, from: dataToDecode) print(results) } catch { print("Error") }我仍然收到错误消息。我做错了什么? -
在注释中放置多行代码是个坏主意。如果您喜欢这样做,请将其添加到问题中。您的
JSON缺少results键,这就是它无法解析的原因。目前您的JSON是一个简单的哈希[String:Double],即使使用JSONSerializer也可以解码。但是,您的“最佳”问题暴露了(通常的)问题:“您想(用它)做什么?”