SwiftのJSONをパースする定番はAFJSONResponseSerializer
実装方法はいくつかあると思いますが、
大体、以下のようなコードになります
let manager = AFHTTPRequestOperationManager()
manager.responseSerializer = AFHTTPResponseSerializer()
manager.GET("http://webservice.recruit.co.jp/relax/salon/v1?response_reserve=1&count=15&order=3&address=%E9%8A%80%E5%BA%A7&key=d80cc5011c92e61d&format=json", parameters: nil,
success: { (operation: AFHTTPRequestOperation!, responseObject:AnyObject!) in
println("response: \(responseObject)")
}, failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
println("error: \(error)")
})
ただHotpapper APIだとパースが上手くいきませんでした。
ホットペッパーのデータはこんな感じ
{
"results":{
"results_available":269,
"api_version":"1.01",
"salon":[
{
"last_update":"2014-07-25T08:17:37",
"equipment":"12席",
"mood":[
{
"caption":"写真はハンド&フットでオフ込9900円♪ウォーターバス無料☆",
"photo":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/89/94/C002068994/C002068994_219-164.jpg"
},
{
"caption":"大好評☆ウォーターバス&オフ無料☆オフ込6700円(税込)デザイン",
"photo":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/79/91/C001977991/C001977991_219-164.jpg"
},
{
"caption":"大好評デザイン☆『リゾートシェル』オフ込5200円(税込)",
"photo":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/90/10/C002069010/C002069010_219-164.jpg"
}
],
"name_kana":"エービーシーネイル ギンザテン",
"catch_copy":"【何度でもオフ無料】駅徒歩1分♪1カラーorラメグラ3980円☆表示価格すべて税込!平日昼割はオフ込4200円♪",
"lng":"139.7677283349",
"lat":"35.6730461059",
"urls":{
"qr":"http://webservice.recruit.co.jp/common/qr?url=http%3A%2F%2Fb.hpr.jp%2Fkr%2FH000253802%2F%3Fvos%3Dnhpkapis00001%26uid%3DNULLGWDOCOMO",
"pc":"http://beauty.hotpepper.jp/kr/slnH000253802/?vos=nhpkapis00001",
"mobile":"http://b.hpr.jp/kr/H000253802/?vos=nhpkapis00001&uid=NULLGWDOCOMO"
},
"address":"東京都中央区銀座2-7-7GINZA2ndAve.1-A 5F",
"description":"いつでもオフ代無料♪表示価格はすべて税込♪1カラーorラメグラがオフ代込みでお値段変わらずいつでも3980円☆次回予約で2回目10%オフ!銀座線・丸ノ内線「銀座駅」徒歩2分、有楽町線「銀座一丁目駅」徒歩1分の好立地!夜22時迄営業で通いやすさ抜群☆経験豊富なネイリストが貴方の指先を大人ネイルに仕上げますっ♪",
"feature":[
{
"code":"C023",
"name":"ペディキュアコレクション",
"caption":"デザイン多数♪全てオフ代込&税込!次回予約10%オフ♪駅徒歩1分で『3980円』から!当日予約もOK☆",
"g_code":"SO01",
"g_name":"注目特集",
"photo":{
"s":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/46/C002027146/C002027146_89-119.jpg",
"l":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/46/C002027146/C002027146_262-349.jpg",
"m":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/46/C002027146/C002027146_164-219.jpg"
},
"description":"大人気!!フットはウォーターバス無料でオフ込5700円~☆フット&ハンドで更に1000円引と断然お得!【写真はクーポン【8】オフ込6700円】次回予約で2回目10%オフ♪平日昼割オフ込4200円(ハンド)♪"
},
{
"code":"L026",
"name":"シンプル系(オフィス・日常)",
"caption":"【いつでもオフ無料3980円(税込)~】全メニュー税込表示!当日予約OK♪次回予約で2回目さらに10%オフ☆",
"g_code":"SP41",
"g_name":"デザインやプランから探す",
"photo":{
"s":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/70/97/C002027097/C002027097_89-119.jpg",
"l":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/70/97/C002027097/C002027097_262-349.jpg",
"m":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/70/97/C002027097/C002027097_164-219.jpg"
},
"description":"新作☆夏ホロ♪『トロピカルドロップ』【写真はクーポン【4】利用でオフ込4200円】全メニューオフ無料♪当日予約もちろんOK!ABCは低価格・好立地・短時間!フット&ハンド同時ならお会計から更に1000円引き♪"
},
{
"code":"L031",
"name":"初めての方にオススメ",
"caption":"【いつでもオフ無料3980円(税込)~】全て税込のお値段!駅徒歩1分~♪ワンカラーorラメグラがオフ込3980円",
"g_code":"SP42",
"g_name":"サロンの特徴から探す",
"photo":{
"s":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/70/98/C002027098/C002027098_89-119.jpg",
"l":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/70/98/C002027098/C002027098_262-349.jpg",
"m":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/70/98/C002027098/C002027098_164-219.jpg"
},
"description":"今月の新作♪シェルスワロ満載☆『大人サマージュエリー』【写真はクーポン【5】利用でオフ込4700円】次回予約で次回のお会計から10%オフと断然お得☆〔新規&全員〕ワンカラー・ラメグラ・ラメ1色オフ込3980円♪"
},
{
"code":"L027",
"name":"モテ可愛系(デート・合コン)",
"caption":"【いつでもオフ無料3980円(税込)~】表示価格はすべて税込み♪次回予約で2回目10%オフ♪当日予約OK!",
"g_code":"SP41",
"g_name":"デザインやプランから探す",
"photo":{
"s":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/05/C002027105/C002027105_89-119.jpg",
"l":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/05/C002027105/C002027105_262-349.jpg",
"m":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/05/C002027105/C002027105_164-219.jpg"
},
"description":"新作☆お待たせしました!!人気の縦グラデ☆『ジュエリーミックス』【写真はクーポン【6】利用でオフ込5200円】全メニューオフ代込&税込♪毎月のキャンペーンネイルに4200円コース誕生★5200円・5700円コースもお得!"
},
{
"code":"L077",
"name":"定額プランのあるサロン",
"caption":"【いつでもオフ無料3980円(税込)~】税込表示でわかりやすい!オフ無料で安心♪当日予約OK!駅徒歩1分~",
"g_code":"SP41",
"g_name":"デザインやプランから探す",
"photo":{
"s":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/08/C002027108/C002027108_89-119.jpg",
"l":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/08/C002027108/C002027108_262-349.jpg",
"m":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/08/C002027108/C002027108_164-219.jpg"
},
"description":"新作デザイン♪大人レディなシェルネイル『ジャスミンサマー』【写真はクーポン【7】利用でオフ込5700円】すべてオフ代込で安心定額制☆お友達との同時もOK☆フットも嬉しいウォーターバス無料でオフ代込5700円~♪"
},
{
"code":"L075",
"name":"長さ出しのできるサロン",
"caption":"【いつでもオフ無料3980円(税込)~】表示価格は全て税込み♪駅徒歩1分~☆次回予約で2回目さらに10%オフ",
"g_code":"SP41",
"g_name":"デザインやプランから探す",
"photo":{
"s":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/18/C002027118/C002027118_89-119.jpg",
"l":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/18/C002027118/C002027118_262-349.jpg",
"m":"http://imgbp.hotp.jp/CSP/IMG_SRC_K/71/18/C002027118/C002027118_164-219.jpg"
},
"description":"新作★夏デザイン☆『アンダー・ザ・シー』【写真はクーポン【6】利用でオフ込5200円】22時迄営業で仕事後でも通える♪銀座駅2分・銀座一丁目駅1分と好立地♪フットも嬉しいウォーターバス無料+オフ代込で5700円~♪"
}
}
...
}
*見やすいように整形しています。APIを叩いて表示される内容とは異なりますので
ご了承ください。
SwiftyJSONのセットアップ
1・SwiftyJSON.swiftをダウンロード
以下のサイトからコードを取得します。
私はzipファイルをダウンロード後、解凍し、開いたxcode6 beta5を開き、
作成済みのプロジェクトにdrag & dropで投げ込みました。
コマンドベースでやりたい方は、作成済みのプロジェクトに移動して、
git cloneで取得する方法でも良いかと思います。
SwiftyJSON
https://github.com/lingoer/SwiftyJSON
SwiftyJSONを使ったソース
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem()
let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "insertNewObject:")
self.navigationItem.rightBarButtonItem = addButton
// API先指定
var url = "http://webservice.recruit.co.jp/relax/salon/v1?response_reserve=1&count=15&order=3&address=%E9%8A%80%E5%BA%A7&key=d80cc5011c92e61d&format=json"
var reqest = NSURLRequest(URL: NSURL(string: url))
NSURLConnection.sendAsynchronousRequest(reqest,queue:NSOperationQueue.mainQueue(),completionHandler:{
(res: NSURLResponse!, data: NSData!, error: NSError!) in
let json = JSONValue(data)
if let url = json["results"]["salon"][0]["urls"]["pc"].string{
println(url)
self.url = url
}
if let image = json["results"]["salon"][0]["mood"][0]["photo"].string{
println(image)
}
if let caption = json["results"]["salon"][0]["mood"][0]["caption"].string{
println(caption)
}
})
}
実行結果
- クーポンURL
- クーポンで使用している画像
- クーポンで使用しているcaption
が表示されていることが確認できます!