[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門
MacからLaradock PostgreSQLで接続エラー
Mac で Laradock の構築
Dockerで不要なイメージを削除
yarn インストール&プロジェクト作成
Laravel 6.x 構築(Homestead編)
Composer インストール
nvm インストール
npm install が Mac でエラー
HTMLタグでカーソルが同時処理(ミラーリング)されてしまう
DI(依存性注入)
[Ubuntu]Let's Encryptで無料の証明書を利用する
[Apache]Apache2.4のアクセス制限が変更
[Ubuntu]rootのログインとsudo権限追加
タミヤ マイコンロボット工作セットをMacに接続してみた
pgAdimn4 でブラウザで開けなくなる
Java8 を HomebrewとjEnvで構築
Android Studio環境構築 2019
ロケールの再構築
vagrant グループに Apacheを追加
Linux2 Apache2 + PHP7.3 + PostgreSQL10
Anadondaの削除
[Mac]初期設定メモ(CentOS)
[Mac]PostgreSQL起動
FormRequest を利用したバリデーション
try-catch で Exception検知
[Debian]Node.js安定板インストール
Middlewareを利用したルートグループ化
namespaceを利用したルートグループ化
名前付きルートによるリダイレクト
artisanコマンド
IE11以下でclosest() を利用する
Karma と Mochaインストール
コンポーネントを親に登録
[脱jQuery]LoadingOverlay をネイティブで実装
Targetを利用せずに新規ウィンドウを開く(rel,class)
[脱jQuery]ネイティブでDrag&Dropやtableソート
[脱jQuery]$(document).on() をネイティブでコーディング
[Git].gitignore が反映されない
[Git]不要ファイル履歴削除
[GAS]Gmail指定ラベルの不要メール削除
UFJ API(開発用)を利用してみる
RuntimeException No application encryption key has been specified
2020/01/30
icon Codable で JSONを読み込み

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())
    }