Codable で JSONを読み込み

2020/01/30

Codable を利用して、JSONを 構造体の配列で扱ってみる

構造体を定義

JSONのデータにあわせて、Codable クラスの構造体を定義する。


struct HiraganaEntry: Codable {
    var word:String
    var kana:String
    var length:Int
}

Entityを定義

カスタムクラスのEntity の配列を定義する


var hiraganaEnties: [HiraganaEntry] = []

JSONファイルのパスを設定する

Bundle.main.path() でプロジェクト内の JSON ファイルのパスを作成する。

  • forResource: ファイル名
  • ofType: 拡張子

guard let path = Bundle.main.path(forResource: name, ofType: "json") else { return nil }

JSONを読み込む

ファイルパスから UTF-8 で String型で読み込む


let json:String
json = try String(contentsOfFile: path, encoding: .utf8)

JSONデコード

JSON(String)を、定義したEntity の配列でデコードする


let entries = try! jsonDecoder.decode([HiraganaEntry].self, from: (json.data(using: .utf8)!))

全体のコード


    let jsonDecoder = JSONDecoder()
    var hiraganaEnties: [HiraganaEntry] = []
    
    struct HiraganaEntry: Codable {
        var word:String
        var kana:String
        var length:Int
    }

    func getJSON(name:String) -> Codable? {
        let json:String
        guard let path = Bundle.main.path(forResource: name, ofType: "json") else { return nil }
        do {
            json = try String(contentsOfFile: path, encoding: .utf8)
        } catch _ {
            return nil
        }
        let entries = try! jsonDecoder.decode([HiraganaEntry].self, from: (json.data(using: .utf8)!))
        return entries
    }
    
    func loadHiragana() {
        hiraganaEnties = getJSON(name: "file_name") as! [GameViewController.HiraganaEntry]
        print(hiraganaEnties.randomElement())
    }
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel7 リリース
v-html でHTML表示する
Laravel で Nuxt.js を使ってみる(Docker環境)
Laravel で Vue コンポーネントを使う
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門(yarn編)
MacからLaradock PostgreSQLで接続エラー
Mac で Laradock の構築