カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

JSONデータをCodableを使って構造化する

この記事は最終更新日から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,228 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です