JSONデータをCodableを使って構造化する
- iOS
-
2018-08-04 - 更新:2018-08-06
この記事は最終更新日から1年以上経過しています。
JSONデータを解析するためにJSONSerializerを使っていましたが、Swift4からもっと簡単にできるようになったのでやってみました。
CodableというプロトコルがSwift4から新たに追加されました。
これを利用すれば簡単に構造体に落とし込むことができます。
まずはデータを扱う構造体を宣言します。
Codableと付け加えましょう。
struct myData: Codable {
let ID_C: Int
let NAME_C: String
let COMMENT_C: String? //nullを許容
let DATE_C: String
}
次にWEB上からデータを取得するため、URLSessionを使用します。
let session = URLSession(configuration: URLSessionConfiguration.default) let url = "http://www.example.jp/json.php" //JSONデータを取得するURL
単純に文字列で出力してみましょう。
var json: myData?
session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: {
(data, response, error) in
if let urlContent = data {
print(urlContent) //バイト数が出力される
json = try! JSONDecoder().decode(myData.self, from: urlContent)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let encoded = try! encoder.encode(json)
print(String(data: encoded, encoding: .utf8)!)
}
}).resume()
次はデータを配列で取得してみましょう。
var json: [myData]?
session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: {
(data, response, error) in
if let urlContent = data {
print(urlContent) //バイト数が出力される
json = try! JSONDecoder().decode([myTaps].self, from: urlContent)
for result in json {
print(result.NAME_C)
}
}
}).resume()
簡単にループして取り出せるようになりました。
Xcode: 9.4.1
Swift: 4.1
OS: High Sierra 10.13.6
この記事がお役に立ちましたらシェアお願いします
2,440 views




