SwiftでJSONデータを扱う際に便利なのが「JSONSerialization」です。
APIとのやり取りや、データの永続化処理などで、JSONをSwiftオブジェクトに変換したり、逆にSwiftの辞書や配列をJSONに変換するのに活躍します。
この記事では、JSONSerialization の基本的な意味や使い方、データ変換の具体例、注意点までをわかりやすく丁寧に解説します。
JSONSerializationとは?
JSONSerialization は、Foundation フレームワークに含まれるクラスです。
Swiftのオブジェクト(DictionaryやArrayなど)をJSON形式に変換したり、逆に JSONデータをSwiftで扱いやすいオブジェクトに変換する役割を持っています。
サーバーとのデータ送受信や、ローカルファイルに保存するデータを扱うときなど、JSONフォーマットが必要な場面で頻繁に使われます。
JSONSerialization の仕組みと動き
JSONSerialization を使うことで、以下のような双方向の変換が可能になります:
- Swift → JSON:
data(withJSONObject:)
を使って辞書や配列を Data 型のJSONに変換 - JSON → Swift:
jsonObject(with:)
を使って JSONデータを Swiftのオブジェクトに変換
これにより、外部APIとの通信や、ローカルファイルの読み書きが非常にスムーズになります。
具体例:Swiftの辞書をJSONデータに変換する
1 2 3 4 5 6 7 8 9 10 11 12 |
import Foundation let user: [String: Any] = [ "name": "Taro", "age": 30, "isMember": true ] if let jsonData = try? JSONSerialization.data(withJSONObject: user, options: [.prettyPrinted]) { print(String(data: jsonData, encoding: .utf8)!) } |
user
を JSONSerialization.data(withJSONObject:)
を使って Data 型のJSONに変換しています。
出力結果はJSON形式の文字列になります。
options
に .prettyPrinted
を指定(省略可能)することで、整形された見やすい形式で出力されます。
具体例:JSONデータをSwiftのオブジェクトに変換する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
let jsonString = """ { "name": "Hanako", "age": 25, "isMember": false } """ if let data = jsonString.data(using: .utf8), let object = try? JSONSerialization.jsonObject(with: data, options: []), let dict = object as? [String: Any] { print(dict["name"] ?? "") } |
jsonString
を Data に変換し、それを Swift の辞書に変換しています。
.jsonObject(with:options:)
の戻り値は Any
型なので、必要に応じて [String: Any]
などにキャストして使います。
指定できる引数とその意味
JSONSerialization
では、主に以下の2つのメソッドで引数を指定できます。
それぞれの意味は以下の通りです。
data(withJSONObject:options:)
引数名 | 説明 |
---|---|
withJSONObject |
JSONに変換したいオブジェクト(DictionaryやArray) |
options |
出力形式の指定(整形・ソートなど) |
主な options
の値:
.prettyPrinted
→ 人間が読みやすいように整形されたJSONを生成(デバッグに便利).sortedKeys
→ 辞書のキーをアルファベット順に並び替えて出力(主に比較用やテスト用)
jsonObject(with:options:)
引数名 | 説明 |
---|---|
with |
JSONのDataデータ |
options |
読み取り時の動作指定(mutableにするかなど) |
主な options
の値:
[]
(空)
→ 最も一般的な使い方。読み取り専用で安全。.mutableContainers
→ 戻り値の配列や辞書をNSMutableArray
/NSMutableDictionary
として返す.mutableLeaves
→ 文字列部分をNSMutableString
として返す(あまり使われない)
これらのオプションをうまく使い分けることで、読みやすさ・編集可否・比較のしやすさなどが向上します。
JSONSerialization の活用シーン
JSONSerialization は次のような場面で活用されます。
- Web APIから取得したJSONレスポンスをSwiftで扱いたいとき
- Swiftの辞書データをJSONとして保存・送信したいとき
- ネットワーク通信で使う httpBody の生成(POSTリクエストなど)
- JSONファイルの読み書き
- Codableが使えない場面や、柔軟な処理が必要な場合のデータ操作
特に、サーバーとの非同期通信において、レスポンスやリクエストの変換処理として定番の役割を果たします。
JSONSerialization を使うときの注意点
JSONSerialization は柔軟で便利な反面、型安全ではないため、使い方を誤ると実行時エラーやデータの不整合が発生しやすいという側面もあります。
以下のポイントを理解しておくと、より安全に使うことができます
jsonObject(with:)
の戻り値はAny
型で返ってくるため、型キャストが必要data(withJSONObject:)
で変換できるのは Dictionary や Array のみ(それ以外の型では失敗)- キーや値の型が JSON と互換性のない形式(DateやEnumなど)だと変換に失敗する
- Codableと違って型安全ではないため、実行時エラーに注意が必要
まとめ
今回は JSONSerialization について詳しく紹介しました。
- JSONSerialization は、SwiftオブジェクトとJSONデータの相互変換を行うためのクラス
- Swift → JSON:
data(withJSONObject:)
、JSON → Swift:jsonObject(with:)
- Web APIとの通信やローカルファイルの操作でよく使われる
- Codableより柔軟な場面や、軽量なデータ変換処理で便利
- 型キャストや変換失敗時のエラーハンドリングには注意が必要
- オプションで整形・編集可能な構造への変換も可能
SwiftでJSONを扱う場面では、まずJSONSerializationを理解しておくことが大切です。
基本的な使い方を押さえておくことで、API連携やデータ保存処理がぐっと楽になるはずです!