JSONをDartクラスに変換(Flutter)
JSONをfromJson/toJson付きのnull安全なDartモデルクラスに変換するか、json_serializableのアノテーションを生成します。入れ子のクラスとリストにも対応しています。
すべてのサンプルがnullだったか、サンプルごとに値の種類が違うため、dynamicを使っています。実際の型がわかったら置き換えてください。
10.0のように書かれた数値は整数として読み取られるため、サンプルがすべてそうなっているフィールドはintになります。doubleにするには、小数を含むサンプルを1つ入れてください。
FlutterアプリはJSONをDartのモデルクラスにデコードしますが、フィールド、コンストラクター、fromJson、toJsonを手で書くのは時間がかかり、間違いやすい作業です。APIレスポンスのサンプルを貼り付けると、null安全なDartクラスが得られます。入れ子のオブジェクトはそれぞれクラスになり、配列はList<T>になり、一部のサンプルでnullまたは欠けているフィールドはnull許容(T?)になり、snake_caseのキーはcamelCaseのフィールドになりつつ正しいJSONキーを読み取ります。パッケージ不要の手書き形式のfromJson/toJsonか、コード生成用のjson_serializableアノテーションを選べます。
使い方
- 代表的なJSONサンプルを貼り付けます。複数の項目を持つ配列だと、最も正確な型になります。
- ルートクラス名を入力します。
- 手書き形式のfromJson/toJson、json_serializable、フィールドのみのいずれかを選びます。
- フィールドを必要なときだけnull許容にするか常にそうするか、ISO日付の文字列をDateTimeにするかを決めます。
- コードを.dartファイルにコピーします(json_serializableの場合はbuild_runnerを実行)。
計算式
整数 → int · 小数 → double · true/false → bool · テキスト → String · ISO日付 → DateTime · [ … ] → List<T> · { … } → クラス
同じ位置で見つかった値はマージされます。intとdoubleはdoubleになり(numとして読むため、JSONの1でもキャストに失敗しません)、種類が混在するとdynamicになります。一部のサンプルでnullの、または一部の配列項目にないフィールドはnull許容です。同じ形のオブジェクトは1つのクラスを共有し、リスト項目のクラスはキーの単数形で名前が付きます(orders → Order)。Dartのキーワードやdart:coreの型と衝突する名前には接尾辞が付きます(class → classValue、Map → MapModel)。
計算例
サンプルのユーザーからは3つのクラスができます。Userには、final int id、String name、String email、bool isActive(is_activeから)、double balance、DateTime createdAt、List<String> tags、Address address、List<Order> orders、そしてサンプルではnullのdynamic managerがあります。Orderには、String orderId、double total(59.9と12がマージされてdouble)、int items、String? couponがあり、クーポンは2件目の注文にしかないためnull許容です。fromJsonはjson['order_id']を読み取り、toJsonはcreatedAtをtoIso8601String()で書き出します。
よくある質問
手書きとjson_serializableのどちらがよいですか?
手書きのfromJson/toJsonはパッケージもビルド手順も不要で、小さなモデルに向いています。json_serializableはbuild_runnerを使って、同じコードをアノテーションから生成し、モデルが頻繁に変わる場合に保守しやすくなります。
フィールドの型がdynamicになるのはなぜですか?
すべてのサンプルがnullだったか、数値とテキストのように種類が混在しているためです。実際の値があるサンプルを貼り付けるか、型を手で指定してください。
doubleのフィールドが(json['x'] as num).toDouble()を使うのはなぜですか?
JSONは12と12.0を区別しないため、jsonDecodeは整数に対してintを返します。直接doubleにキャストすると例外になりますが、numを経由すれば両方を受け付けます。
JSONはアップロードされますか?
いいえ。クラスはブラウザ内で生成されます。
出典
最終更新:
この入力内容のページアドレス: https://kakao.mobile/ja/tools/json-to-dart-pojo-generator/
このツールを引用する
kakaoCalc. (2026, November 8). JSONをDartクラスに変換(Flutter). https://kakao.mobile/ja/tools/json-to-dart-pojo-generator/
“JSONをDartクラスに変換(Flutter).” kakaoCalc, 8 Nov. 2026, kakao.mobile/ja/tools/json-to-dart-pojo-generator/.