質問: swift5.1.3でJSONを扱い始めたのですが外部ファイルなどからswift側で扱える形式にするときに検索する限りでは * 構造体(struct)で元となる雛形を用意してそれに合わせてマッピングしているもの(JSONDecoder を使う) * 辞書型(Dictionary< , >)の変数を用意してそこに キー&値 を任意で追加していくもの(JSONSerialization を使う) の二通りが見受けられたのですがどのような使い分けが求められるのでしょうか。 あるいはいずれも本質的には同じで単に扱いが違うよってだけなのですか。 もしかしたら完全に的外れな質問をしてしまっているかもしれません。 もし、実際の例などの提示が望ましければ、コメントいただけると幸いです。
回答: 読み込む`JSON`形式のデーターの`Key`が網羅的に既知か否かで使い分けると良いと思います。 構造体にマッピングするためにはその構造体を明確に定義し、存在したりしなかったりする`Key`をオプショナル`?`付きの型でメンバー定義してあげるとその`Key`が存在しなくても`Decode`エラーにならないですし、構造が明確ですのでアクセスも早いと言うメリットがあります。 逆に、読み込む`JSON`形式のデーターがどの様な`Key`を持ち、どの様に入れ子になっているか?が頻繁に変わる際はその度に構造体を定義して、ソースに追記するコストが高くなるので、`Dictionary`で受けとって、各キー毎に処理した方が新しいキーが出現する度にソースをメンテする必要がなくコーディングコストもメンテナンスコストも抑えられると思います。