Tool Kumarのツール

JSONをDartのモデルに変換

FlutterのAPIレスポンス用に、Dartのモデルを生成します。ネストした各クラスには、finalフィールド、constコンストラクター、fromJsonファクトリ、toJsonメソッドが含まれます。

このツールの使い方

  1. フィールドが異なるレコードも含めて、代表的なレスポンスを貼り付けます。
  2. 生成された出力を確認し、必要に応じてルート名を変更します。
  3. コードをコピーまたはダウンロードし、型が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を呼び出してください。

関連ツール

JSONをSwiftのモデルに変換、JSONをKotlinのデータクラスに変換、JSON Schema生成。