Tool Kumarのツール
JSONをDartのモデルに変換
FlutterのAPIレスポンス用に、Dartのモデルを生成します。ネストした各クラスには、finalフィールド、constコンストラクター、fromJsonファクトリ、toJsonメソッドが含まれます。
このツールの使い方
- フィールドが異なるレコードも含めて、代表的なレスポンスを貼り付けます。
- 生成された出力を確認し、必要に応じてルート名を変更します。
- コードをコピーまたはダウンロードし、型がAPI仕様と合っているか確認します。
実行例
この出力は組み込みの変換機能で生成したものです。2つのitemのpriceからは浮動小数点数のフィールドが、nullと文字列のnoteからはnull許容のフィールドが推論されます。
入力
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}出力
class Root {
final int userId;
final Profile profile;
final List<Item> items;
const Root({
required this.userId,
required this.profile,
required this.items,
});
factory Root.fromJson(Map<String, dynamic> json) => Root(
userId: json['user-id'] as int,
profile: Profile.fromJson(json['profile'] as Map<String, dynamic>),
items: (json['items'] as List<dynamic>).map((e) => Item.fromJson(e as Map<String, dynamic>)).toList(),
);
Map<String, dynamic> toJson() => {
'user-id': userId,
'profile': profile.toJson(),
'items': items.map((e) => e.toJson()).toList(),
};
}
class Profile {
final String city;
final String createdAt;
const Profile({
required this.city,
required this.createdAt,
});
factory Profile.fromJson(Map<String, dynamic> json) => Profile(
city: json['city'] as String,
createdAt: json['created_at'] as String,
);
Map<String, dynamic> toJson() => {
'city': city,
'created_at': createdAt,
};
}
class Item {
final double price;
final String? note;
const Item({
required this.price,
this.note,
});
factory Item.fromJson(Map<String, dynamic> json) => Item(
price: (json['price'] as num).toDouble(),
note: json['note'] as String?,
);
Map<String, dynamic> toJson() => {
'price': price,
'note': note,
};
}
Flutterでモデルを使う
dart:convertをインポートし、生成されたクラスをモデル用のファイルに貼り付けます。デコードしたレスポンスのMapをRoot.fromJsonに渡します。jsonEncodeは、生成されたtoJsonメソッドを呼び出します。
プロジェクトですでにjson_serializableを使っている場合は、生成されたJSONメソッドを2系統で管理するのではなく、フィールドをそのワークフローに合わせてください。
import 'dart:convert';
final model = Root.fromJson(jsonDecode(responseBody) as Map<String, dynamic>);
final text = jsonEncode(model.toJson());オプションと注意点
- user-idのようなJSONキーは、camelCaseのフィールドに対応付けられます。生成されたJSONメソッドでは元のキーが保たれます。
- 整数と小数のpriceは、doubleにまとめられます。デコード処理ではnumを経由してキャストし、toDoubleを呼び出すため、サンプルのどちらの値でも動作します。
- nullと文字列が混在するとString?になります。nullしか見られないフィールドは、本来の型がわからないためdynamicのままです。
- 日付はStringのままです。DateTimeへの変換はご自身で確認してください。Web向けにコンパイルしたDartでは、大きな整数をすべて正確に表現できるわけではありません。
標準でプライバシーを保護
ドキュメントはこのブラウザー内に残ります。Tool Kumarは、解析、変換、ダウンロードファイルの作成を端末内で行います。アカウント登録やアップロードの手順はありません。
JSONをDartのモデルに変換のよくある質問
- json_serializableのアノテーションも生成されますか?
- いいえ。fromJsonとtoJsonのメソッドを直接書き出します。@JsonSerializableアノテーション、partファイル、build_runnerの手順はありません。
- null安全はどう扱われますか?
- nullの値や、一部のレコードに存在しないフィールドがあると、推論されるフィールドはnull許容になります。nullでないフィールドはrequiredのコンストラクター引数になり、nullのみのフィールドはdynamicになります。
- ネストしたオブジェクトの配列も変換できますか?
- はい。サンプルからはList<Item>が生成されます。入力の各要素はItem.fromJsonで変換され、エンコード時には各itemのtoJsonが呼び出されます。
- Flutterのパッケージは必要ですか?
- 生成されるモデルはDartのコア型を使います。レスポンスのテキストをdart:convertでデコードしてから、Root.fromJsonを呼び出してください。