今までObjective-cでJSONをやっていたんですが、
Swiftをそろそろやってみようと思い調べながらやってみましたのでメモついでに書き込みます。
共通定数クラス
取得先のURLは共通定数クラスに定義したいので以下のようにしました。
(他にいい書き方ないのかな。。。)
Const.swift
import Foundation
class const {
/** JSON用URL */
struct jsonUrl {
static let hoge = "http://hoge.com/hoge.json"
・
・
・
}
}
JSONを取得してログに出してみる
JSONのサンプル
取得するJSONのサンプルは以下の通りです。
{
"items" : [
{
"title" : "hogeeeeee",
"image" : "http://hoge.co.jp/hogeeee.jpg",
"release" : "2015-03-01T00:00:00+00:00",
"auth" : "保毛保毛"
},
・
・
・
]
}
定数を取得
先ほど Const.swift で定義した値を使ってNSData
型で取得します。
リクエストのURL
var strJsonUrl = const.jsonUrl.hoge
var jsonData = NSData(contentsOfURL: NSURL(string: strJsonUrl)!)
Swiftで単純にやってみた
キーitems
の中にあるリストから1つ目を取得し、その中のキーtitle
のValueを取得してみます。
let jsonMap:NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonData!,options: NSJSONReadingOptions.AllowFragments, error: nil) as NSDictionary
if let itemsArray = jsonMap["items"] as? NSArray {
if let firstItem = itemsArray[0] as? NSDictionary {
if let item = firstItem["title"] as? NSString {
println(item)
}
}
}
面倒すね。。
結果
hogeeeeee
SwiftyJSONを使ってみた
SwiftyJSONを取得します。
実際に使うのは Source ディレクトリの中にある SwiftyJSON.swift のみです。
そのままプロジェクトにドラッグアンドドロップで取り込みます。
GitHub
git clone https://github.com/SwiftyJSON/SwiftyJSON.git
ソースは以下のとおりです。
let json = JSON(data:jsonData!)
println(json)
if let title = json["items"][0]["title"].string {
println(title)
}
とっても簡単!
SwiftyJSONがすげー!って記事をいくつか見たんですが、半信半疑でやった結果
やっぱりすげー!でした。
参考
- [Swift] JSONを簡単に扱う為のライブラリ SwiftyJSONのサンプル - Developers.io
- SwiftでJSONを扱うライブラリ SwiftyJSON | json-swift - 定食屋おろポン
※サイトに記載されてるままではOptionalでエラーになってしまいました。