100% ローカル — データがブラウザの外に出ることはありません

JSONをSwiftに変換|CodingKeysまで書いて出力する

JSONのサンプルを、Codableに準拠したSwiftの構造体に変換します。プロパティ名にできないキーは CodingKeys で拾い直され、その定義まで書き出されます。

高速 プライベート Cookieゼロ

JSON 入力

Swift 出力

このツールの動作

JSON の標本が、Codable に準拠した Swift の構造体になります。

{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
struct Root: Codable {
    let id: Int
    let firstName: String
    let address: Address
}

struct Address: Codable {
    let city: String
}

JSONDecoder がそのまま読みます。入れ子のオブジェクトはそれぞれ構造体になり、根がオブジェクトの配列なら typealias が付くので、並びにも名前がつきます。

名前を変えた場所には CodingKeys を

プロパティ名にハイフンは使えず、数字でも始められず、予約語にはバッククォートが要ります。鍵をそのまま名前にできないとき、対応が書き出されます。

struct Root: Codable {
    let contentType: String
    let `class`: Int
    let f2fa: Bool

    enum CodingKeys: String, CodingKey {
        case contentType = "content-type"
        case `class`
        case f2fa = "2fa"
    }
}

`class` に対応が付かないことにご注目ください。バッククォートは Swift が名前をどう読むかを変えるだけで、名前そのものは変えていません。列挙は、ひとたび存在するなら全部の場合を並べます。欠けた CodingKeys は、書かれなかったプロパティを黙って落としてしまうからです。

JSONValue と、それがある理由

null、空の配列、型の混ざった配列からは、推し量れるものがありません。Swift には復号も符号化もできる「任意の JSON 値」が用意されていないので、小さな列挙を末尾に一度だけ出します。

let nickname: JSONValue?
let tags: [JSONValue]

JSON が持ちうる六つのものだけを扱います。あとで「null を許す文字列」だと分かれば、String? に置き換え、列挙は消せます。

標本が言えないこと

省略可能になるのは null だけです。ほかはすべて省略不可です。文書に値があったからで、あとから付ける ? は一文字で済むのに対し、余計な ? は、項目が欠けていることを、それが問題になる時まで隠してしまいます。

Int と Double は、値ではなく数値の書かれ方から決まります。3 は Int、3.0 は Double です。Swift ではこの違いが効きます。3.5 を Int に復号すると、丸めではなく例外になります。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

`CodingKeys` の列挙はいつ出ますか。
プロパティ名が鍵と食い違った時点で出ます。`content-type` は名前にできないので `contentType` になり、列挙が `case contentType = "content-type"` と結び直します。すべての名前が鍵と一致しているなら、列挙は雑音でしかないので出しません。Swift が自分で合成します。
末尾のこの `JSONValue` 列挙は何ですか。
標本が型を決められなかった値のための、小さな Codable 型です。`null`、空の配列、型の混ざった配列がそれにあたります。Swift には往復できる「任意の Codable」がないので、JSON が持ちうるものを列挙にしています。必要なときに一度だけ出ます。その項目を本物の型に置き換えれば、消して構いません。
プロパティは `let` と `var` のどちらがよいですか。
既定は `let` です。復号された荷は値だからです。設定を切り替えると構造体全体が `var` になります。読むのではなく組み立てる場合です。両者を混ぜるかは項目ごとの判断で、模型が落ち着いてから手で決めるのがよいでしょう。

関連ツール