SwiftでJSON文字列を生成・パースする方法を徹底解説!CodableとJSONSerializationの基本
生徒
「先生、Swiftでアプリを作るときに、データをJSONっていう形式で扱うことが多いって聞いたんですけど、どうやって文字列にしたり読み込んだりするんですか?」
先生
「良いところに気がつきましたね。JSONはスマホアプリとサーバーがやりとりするときの標準的なデータ形式なんです。SwiftではCodableやJSONSerializationを使ってJSON文字列を簡単に扱えるんですよ。」
生徒
「なるほど!でも、プログラミング初心者の僕には少し難しそうに感じます…」
先生
「大丈夫ですよ。まずは基本から、わかりやすく順番に見ていきましょう!」
1. JSONとは何か?
JSON(ジェイソン)は「JavaScript Object Notation(ジャバスクリプト・オブジェクト・ノーテーション)」の略で、データをやりとりするための形式です。例えば、買い物リストをパソコンとスマホで共有するときに、人間にも読みやすく、コンピュータにも扱いやすい形で表現できるのがJSONです。
例えば次のように書きます。
{
"name": "Taro",
"age": 20,
"isStudent": true
}
これは「名前が太郎で、20歳で、学生です」という情報を表したJSONです。SwiftではこのようなJSONを文字列として扱ったり、逆に自分で作ったデータをJSONに変換したりできます。
2. SwiftでJSONを扱う方法は2種類
SwiftでJSON文字列を生成したり解析(パース)したりする方法は大きく分けて2つあります。
- Codable:Swiftの構造体やクラスをそのままJSONに変換したり、逆にJSONから自動的に変換する方法。
- JSONSerialization:もう少し低レベルな方法で、辞書型(Dictionary)などを使ってJSONを扱う方法。
初心者はまずCodableから学ぶと理解しやすいです。
3. CodableでJSONを生成してみよう
Codableは、Swiftの構造体やクラスをJSONに変換するための便利な仕組みです。例えば次のように書けます。
import Foundation
struct User: Codable {
let name: String
let age: Int
let isStudent: Bool
}
let user = User(name: "Taro", age: 20, isStudent: true)
if let jsonData = try? JSONEncoder().encode(user),
let jsonString = String(data: jsonData, encoding: .utf8) {
print(jsonString)
}
実行すると、次のようなJSON文字列が出力されます。
{"name":"Taro","age":20,"isStudent":true}
このように、SwiftのデータをそのままJSONにできるのでとても便利です。
4. CodableでJSONをパースしてみよう
次に、JSON文字列をSwiftの構造体に変換する方法です。これを「パース」と呼びます。
let json = """
{
"name": "Hanako",
"age": 18,
"isStudent": true
}
"""
if let jsonData = json.data(using: .utf8) {
let decoder = JSONDecoder()
if let user = try? decoder.decode(User.self, from: jsonData) {
print(user.name) // Hanako
print(user.age) // 18
}
}
このように、文字列から構造体に簡単に変換できます。アプリでサーバーから受け取ったデータを使うときによく使われます。
5. JSONSerializationで扱う方法
JSONSerializationはもっと直接的にJSONを扱う方法です。Swiftの辞書(Dictionary)や配列(Array)に変換します。
let jsonText = """
{
"title": "Swift入門",
"price": 1200
}
"""
if let data = jsonText.data(using: .utf8) {
if let jsonObject = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {
print(jsonObject["title"] ?? "")
print(jsonObject["price"] ?? "")
}
}
この方法では、型を自分で確認しながら取り出す必要があります。そのため、初心者はまずCodableを使うのがおすすめです。
6. CodableとJSONSerializationの使い分け
まとめると次のように考えるとわかりやすいです。
- Codable:型安全で、アプリのモデル(構造体やクラス)と相性が良い。大半のケースでこちらがおすすめ。
- JSONSerialization:JSONの中身を一時的に確認したいときや、複雑な構造で型を決められないときに便利。
アプリ開発ではまずCodableを覚えておけば大丈夫です。