Dart の JSON エンコード・デコード処理の Tips 集

主にfreezedパッケージでのJSON エンコード・デコードが絡むコードに関するテクニック

mono 
Flutter 🇯🇵

--

Photo by Justin Campbell on Unsplash

Dart/FlutterでのJSONエンコード・デコードは、以下のドキュメントで一通り説明されていて、単純に扱う分にはまずこれを参考にするのが良いです 👌

実際のプロジェクトでは、ここではカバーし切れていない細かい知識・テクニックが必要になることも多く、本記事ではそのあたりを説明していきます。

まず、前置きとして、たまに議論になる”JSON”という言葉の扱いについて触れます。

Dart での JSON の扱い

JSONの定義は以下のように定められています。

そのため例えば、FirestoreのTimestampなどが入ったMap構造は”JSON”ではないです。なので、そういった値を含むものをJSONと呼ぶのはおかしいという声をたまに聞きます。

それはそうですが、Dartの場合は以下が慣例になっているため、厳密な定義に拘らず「JSON構造の Map<String, dynamic> 」をJSONと呼んで済ませる程度の割り切りをするのが良いと思っています。

  • エンコード: Map<String, dynamic> toJson() => {...}; 形式のメソッド定義
  • デコード: fromJson(Map<String dynamic> json) 名前付きコンストラクタ定義

--

--