今更感ありますが……
DecodableとJSONDecodeでJSONを読む
今回はこういうJSONを用意しました
JSONの元ネタ
currency.json
[
{
"alphabeticCode": "AED",
"numericCode": 784
},
{
"alphabeticCode": "AFN",
"numericCode": 971
},
{
"alphabeticCode": "ALL",
"numericCode": 8
}
]
Decodableプロトコルを継承した構造体を作ります
今回はJSONのキーとメンバ変数の名前を揃えます
struct Currency: Decodable{
let alphabeticCode: String
let numericCode: Int
}
JSONをData型で開きます
(ここではplaygroundのResourceフォルダに置いています)
let path = Bundle.main.path(forResource: "currency", ofType: "json")
let url = URL(fileURLWithPath: path!)
let currencyJson = try Data(contentsOf: url)
JSONDecoder
で読みます
この時、[Currency]
ではなくCurrency
で読みに行くとエラーになります(元のJSONもそういう構造になっていますね)
let result = try JSONDecoder().decode([Currency].self, from: currencyJson)
result.forEach { currency in
// ...
}
コード全文
import Foundation
struct Currency: Decodable{
let alphabeticCode: String
let numericCode: Int
}
let path = Bundle.main.path(forResource: "currency", ofType: "json")
let url = URL(fileURLWithPath: path!)
let currencyJson = try Data(contentsOf: url)
let result = try JSONDecoder().decode([Currency].self, from: currencyJson)
result.forEach { currency in
// ...
}
ありがとうございました