- 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,220 views