見出し画像

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アプリ開発】文字の出力"と出力できました!


この記事が気に入ったらサポートをしてみませんか?