我是Alamofire的新手,我正在测试一些API。我遇到了外汇汇率。所以JSON文件就像这样
["base": CAD, "date": 2016-12-01, "rates": {
AUD = "1.0097";
BGN = "1.3735";
BRL = "2.57";
CHF = "0.7559";
CNY = "5.1388";
CZK = "19.004";
DKK = "5.2248";
EUR = "0.70225";
GBP = "0.59058";
HKD = "5.7881";
HRK = "5.2985";
HUF = "220.48";
IDR = 10108;
ILS = "2.8607";
INR = "51.009";
JPY = "85.246";
KRW = "871.9400000000001";
MXN = "15.403";
MYR = "3.331";
NOK = "6.2941";
NZD = "1.0539";
PHP = "37.102";
PLN = "3.1374";
RON = "3.1631";
RUB = "47.591";
SEK = "6.8775";
SGD = "1.0657";
THB = "26.616";
TRY = "2.6006";
USD = "0.7462800000000001";
ZAR = "10.504";}]
typealias JSONStandard = [String: AnyObject]
func parseData(JSONData:Data) {
do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard
if let rates = readableJSON["rates"] as? JSONStandard{
for i in 0..<rates.count {
let rate = rates[i] as! //Here
}
print(rates)
}
print(readableJSON)
} catch {
print(error)
}
}
我能够获得“利率”,但我不知道如何解析“利率”中的所有数据。我以为我必须把它保存在字典里面。很困惑谢谢
答案 0 :(得分:0)
您必须将其保存为Double:
数组var yourArray = [Double]()
for i in 0..<rates.count {
let rate = rates[i] as! Double
print(rate)
yourArray.append(rate)
}
print(yourArray.description)
答案 1 :(得分:0)
正如您所看到的,它是String中的double值,因此您需要先将AnyObject转换为String,然后将其转换为Double。你可以这样做(在Swift游乐场测试):
import Foundation
typealias JSONStandard = [String: AnyObject]
func parseData(JSONData:Data) {
do {
guard let readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as? JSONStandard,
let ratesJSON = readableJSON["rates"] as? JSONStandard
else { return }
print("Readable JSON :")
print(readableJSON)
let rates = ratesJSON.flatMap({ (key, value) -> ([String: Double]) in
guard let value = value as? String, let convertedValue = Double(value) else { return [:] }
return [key: convertedValue]
})
print("Rates :")
print(rates)
} catch {
print(error)
}
}
let jsonString = "{\"base\": \"CAD\", \"date\": \"2016-12-01\", \"rates\": { \"AUD\": \"1.0097\", \"BGN\": \"1.3735\", \"BRL\": \"2.57\"}}"
let jsonData = jsonString.data(using: String.Encoding.utf8)!
parseData(JSONData: jsonData)
结果:
Readable JSON :
["base": CAD, "date": 2016-12-01, "rates": {
AUD = "1.0097";
BGN = "1.3735";
BRL = "2.57";
}]
Rates :
[("BGN", 1.3734999999999999), ("AUD", 1.0097), ("BRL", 2.5699999999999998)]