Balbas Code

SwiftでJSONを読み込んで構造体に格納して検索

公開日: 2023-11-09 22:09:54

SwiftでJSONファイルを構造体に読み込んで検索する方法について書いていきます。
意外と難しいJSONの扱いも、この記事を読み込めばJSONもバッチリ扱えるようになります。



ステップ 1: JSONファイルの準備


まず、以下のような内容のexample.jsonというファイルをプロジェクトに追加します。


[
{
"id": 1,
"name": "Alice",
"email": "alice@example.com"
},
{
"id": 2,
"name": "Bob",
"email": "bob@example.com"
},
{
"id": 3,
"name": "Charlie",
"email": "charlie@example.com"
}
]

 


ステップ 2: Swiftの構造体の定義


JSONファイルのデータに対応するSwiftの構造体を定義します。


import Foundation

struct User: Codable {
var id: Int
var name: String
var email: String
}

 


 


ステップ 3: JSONファイルの読み込みとデコード


次に、JSONファイルを読み込んでUser型の配列にデコードします。


func loadJSONFromFile() -> [User]? {
guard let url = Bundle.main.url(forResource: "example", withExtension: "json") else {
print("JSON file not found")
return nil
}

do {
let data = try Data(contentsOf: url)
let decoder = JSONDecoder()
let users = try decoder.decode([User].self, from: data)
return users
} catch {
print("Error decoding JSON: \(error)")
return nil
}
}

 


 


ステップ 4: 検索機能の実装


デコードしたユーザーの配列から特定の条件を満たすユーザーを検索する関数を実装します。


func searchUser(byEmail email: String, in users: [User]) -> User? {
return users.first { $0.email == email }
}




実行例


これらの関数を使って、特定のユーザーを検索する例です。


if let users = loadJSONFromFile() {
if let foundUser = searchUser(byEmail: "alice@example.com", in: users) {
print("Found user: \(foundUser.name)")
} else {
print("User not found")
}
}

 


次はJSONのネストを扱うパターンも記述します。