文書   >   Foundation   >   Archives and Serialization   >   カスタム型での JSON の使用
サンプルコード
カスタム型での JSON の使用
Swift のさまざまな種類の JSON をコード化および復号化するためのアプローチを示します。
概観
他のアプリ、サービス、ファイルから送受信した JSON データには、さまざまな形や構造があります。このサンプルで説明する手法を使用して、外部 JSON データとアプリのモデルの型の違いを処理して下さい。
このサンプルは、単純なデータ型である GroceryProduct を定義し、いくつかの異なる JSON 形式からその型のインスタンスを構築する方法を示しています。
struct GroceryProduct: Codable { var name: String var points: Int var description: String? }
配列からデータを読み込む
Swift の表現型システムを使用して、同一構造のオブジェクトのコレクションを手作業でループさせないようにします。このプレイグラウンドでは、配列型を値として使用して、以下のような構造の JSON を操作する方法を確認します。
[ { "name": "Banana", "points": 200, "description": "A banana grown in Ecuador." } ]
キー名の変更
名前に関係なく、JSON キーからのデータをカスタム型のプロパティにマッピングする方法を学びましょう。たとえば、このプレイグラウンドでは、JSON の "product_name" キーを GroceryProduct の name プロパティにマッピングする方法を示します:
{ "product_name": "Banana", "product_cost": 200, "description": "A banana grown in Ecuador." }
カスタムマッピングを使用すると、JSON キーの名前が異なる場合でも、Swift API 設計ガイドライン を Swift モデルのプロパティの名前に適用できます。
入れ子になったデータにアクセスする
コードで必要としない JSON の構造とデータを無視する方法を学びましょう。このプレイグラウンドは中間の型を使用して、不要なデータや構造をスキップするために以下のようなJ SON からの食料品 (grocery products) を抽出する方法を見ていきます。
[ { "name": "Home Town Market", "aisles": [ { "name": "Produce", "shelves": [ { "name": "Discount Produce", "product": { "name": "Banana", "points": 200, "description": "A banana that's perfectly ripe." } } ] } ] } ]
異なる深度でデータを結合する
Encodable および Decodable からのプロトコル要件のカスタム実装を記述することによって、JSON 構造体の異なる深度のデータを結合または分離します。このプレイグラウンドは、JSON から GroceryProduct インスタンスを作成する方法を以下のように示しています。
{ "Banana": { "points": 200, "description": "A banana grown in Ecuador." } }
以下も見よ
JSON
class JSONEncoder
データ型のインスタンスを JSON オブジェクトとしてコード化するオブジェクト。
class JSONDecoder
JSON オブジェクトからデータ型のインスタンスを復号化するオブジェクト。
class JSONSerialization
JSON と、同等の Foundation オブジェクトとの間を変換するオブジェクト。
関連した文書
JSON などの外部表現との互換性のために、データ型をコード化可能かつ復号化可能にします。