Swiftでいこう --JSONって?
JSONとは軽量なデータの表記法で、もともとjavascriptで使われ、Swiftに限らず様々な言語で使われています。
主にwebでapiを叩いて取得してデータなどを活用する場合に使えます。今回はデータを取得してそのデータをテーブルに表示します。qiitaで「ローカルのJSONを読み込んでUITableViewで表示」を参考に説明してみます。swiftのpraygroundsを使っています。
まず、jsonを入れるstruct "User" を定義します。今回はidとnameということで宣言しています。
struct User: Codable {
var id: Int
var name: String
}
そして、class TableViewController:UITableViewControllerを作り上げて行きます。
テーブルに入れる配列を定義していきます。
var users: [User]?
ということで、配列をつくります。配列のデータ型は構造体によりつくっていきます。
テーブルの必要なメソッド2つ実装していきます。
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.users?.count ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
cell.textLabel?.text = "\(self.users?[indexPath.row].name ?? "null")"
return cell
}
それと、JSON をパースする方法は、
func loadJsonFile() {
guard let path = Bundle.main.path(forResource: "users", ofType: "json") else { return }
let url = URL(fileURLWithPath: path)
do {
let data = try Data(contentsOf: url)
let users = try JSONDecoder().decode([User].self, from: data)
self.users = users
} catch {
print(error)
}
}
ですね。users.jsonをパースしていきます。
let users = try JSONDecoder().decode([User].self, from: data)
self.users = users
で最初に宣言している配列の変数usersに入れます。
この関数 loadJsonFile()ですが、 最初に読み込まれる
override func viewDidLoad(){}
で読み込ませ、JSONを取得しています。
全文はこちら。
import UIKit
import PlaygroundSupport
struct User: Codable {
var id: Int
var name: String
}
class TableViewController : UITableViewController {
var users: [User]?
override func viewDidLoad() {
super.viewDidLoad()
loadJsonFile()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.users?.count ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
cell.textLabel?.text = "\(self.users?[indexPath.row].name ?? "null")"
return cell
}
func loadJsonFile() {
guard let path = Bundle.main.path(forResource: "users", ofType: "json") else { return }
let url = URL(fileURLWithPath: path)
do {
let data = try Data(contentsOf: url)
let users = try JSONDecoder().decode([User].self, from: data)
self.users = users
} catch {
print(error)
}
}
}
let tableViewController = TableViewController(style: .plain)
PlaygroundPage.current.liveView = tableViewController
users.jsonとして、
[
{
"id": 1,
"name": "Alice",
},
{
"id": 2,
"name": "Bob",
}
]
を記述しています。
この記事が気に入ったらサポートをしてみませんか?