Swiftで行こう!--JSONの取扱。
Web上のJsonを読み込んでみます。
URLSessionを使います。
アドレスよりデータを取得します。Playgroundでやってみます。
import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let url = URL(string: "https://pythonchannel.com/media/codecamp/201902/JSON-Sample1.json")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let jsonData = data {
// self.printJSON(jsonData)
print(data)
}
}
task.resume()
Playgroundでやるときは
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
が必要です。XcodeのViewControllerでやる場合
import UIKit
class ViewController:UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
//
let jsonUrlString = "https://pythonchannel.com/media/codecamp/201902/JSON-Sample1.json"
guard let url = URL(string: jsonUrlString) else {return}
//
URLSession.shared.dataTask(with: url) {(data, response, error) in
guard let data = data else {return}
print(data)
//
}.resume()
}
}
実行してみると、"285 bytes"と出ます。JSONデータを読み込めていることが確認できました。
次はデータを読み込みます。まず、Playgroundですが、func関数を作ります。JSONDecoder()でデコードします。
struct Blog: Decodable{
let id: Int
let name: String
let link: String
let imageUrl: String
}
func printJSON(_ data: Data) {
do {
let myblog = try JSONDecoder().decode(Blog.self, from: data)
print(myblog.name)
} catch {
print("parse error!")
}
}
ここでCodableです。構造体を作って、表示項目の宣言をしておいて、データを読み込み表示させる関数に入れていきます。
全体です。
import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
struct Blog: Decodable{
let id: Int
let name: String
let link: String
let imageUrl: String
}
class Client {
func someTask() {
let url = URL(string: "https://pythonchannel.com/media/codecamp/201902/JSON-Sample1.json")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let jsonData = data {
self.printJSON(jsonData)
}
}
task.resume()
}
func printJSON(_ data: Data) {
do {
let myblog = try JSONDecoder().decode(Blog.self, from: data)
print(myblog.name)
} catch {
print("parse error!")
}
}
}
let client = Client()
client.someTask()
Xcodeですと、関数使わずに実行できます。
構造体とdo構文ですね。JSONDecoder()を使ってデコードします。
struct Blog: Decodable{
let id: Int
let name: String
let link: String
let imageUrl: String
}
do{
let myblog = try JSONDecoder().decode(Blog.self, from: data)
print(myblog.name)
} catch let jsonError{
print("error", jsonError)
}
全体です。
import UIKit
struct Blog: Decodable{
let id: Int
let name: String
let link: String
let imageUrl: String
}
class ViewController:UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
//
let jsonUrlString = "https://pythonchannel.com/media/codecamp/201902/JSON-Sample1.json"
guard let url = URL(string: jsonUrlString) else {return}
//
URLSession.shared.dataTask(with: url) {(data, response, error) in
guard let data = data else {return}
print(data)
do{
let myblog = try JSONDecoder().decode(Blog.self, from: data)
print(myblog.name)
} catch let jsonError{
print("error", jsonError)
}
}.resume()
}
}
実行すると、
"【はじめてのiPhoneアプリ開発】文字の出力"と出力できました!
この記事が気に入ったらサポートをしてみませんか?