JSONからDartへの変換ツール
JSONオブジェクト、または複数のオブジェクトサンプルを含む配列から、外部パッケージに依存しないDartモデルクラスを生成します。すべてのサンプル項目を統合し、ネストしたクラスを作成して、元のJSONキーを保持したまま、適切なNull Safety対応フィールド型とfromJsonファクトリコンストラクタを出力します。jsonEncodeに対応する出力が必要な場合はtoJsonメソッドも追加できます。サンプルと生成コードはこのブラウザ内だけに保存され、アップロードやURLへの追加は行われません。
使い方
-
1
実データに近いサンプルを貼り付ける
1つのJSONオブジェクト、またはオブジェクトの配列を使用します。複数項目を含めると、欠落フィールド、nullableフィールド、型が混在するフィールドを見つけやすくなります。
-
2
Dartの設定を選ぶ
ルートクラス名を指定し、すべてのフィールドをnullableにするか、toJsonメソッドを含めるかを選びます。
-
3
確認して書き出す
推論されたクラスを確認し、コードをコピーするか、models.dartファイルを端末にダウンロードします。
JSONをNull Safety対応Dartモデルに変換する仕組み
Dart公式のdart:convertドキュメントでは、jsonDecode()が数値、文字列、Boolean、null、リスト、文字列キーのマップなど、JSONに対応する値を返すと説明されています。モデルクラスをそのままJSONにエンコードすることはできませんが、jsonEncode()はクラスのtoJson()メソッドを呼び出せます。このツールはjson_serializableのアノテーションや外部パッケージを追加せずに、この手動シリアライズ方式のコードを生成します。
たとえば、サンプルにネストした住所を持つユーザーが含まれているとします。生成されるUserにはfinalフィールドと名前付き引数のコンストラクタが含まれます。User.fromJson(Map<String, Object?> json)はスカラー値をキャストし、ネストしたオブジェクトにはUserAddress.fromJson()を呼び出します。いずれかのサンプルオブジェクトでaddressが欠落しているかnullの場合、型はUserAddress?となり、ファクトリは生成前にnullを確認します。toJsonを有効にすると、ネストしたモデルも再帰的にjsonEncode()が受け取れるマップへ変換されます。
| JSONで確認された値 | 生成されるDart型 |
|---|---|
| 整数 | int |
| 小数 | double |
| 整数と小数の両方 | num |
| 文字列 | String |
| 真偽値 | bool |
| ネストしたオブジェクト | 生成されたモデルクラス |
| 型が揃った配列 | List<T> |
| 空、または互換性のないネスト配列 | List<Object?> |
| nullだけ、または競合する値 | Object? |
このツールはルート配列の先頭項目だけでなく、すべてのオブジェクトを調べます。いずれかの項目にフィールドがない場合、または明示的にnullが入っている場合、そのフィールドはnullableになります。実際のAPIがサンプルより不規則な場合は、すべてのフィールドをnullableにすることもできます。DartのNull Safetyガイドにあるとおり、型は初期状態ではnullを許容せず、nullを受け入れるには?が必要です。
識別子の処理と型推論の限界
JSONキーは有効なDartメンバー名である必要がありません。句読点を取り除き、単語をlowerCamelCaseへ変換し、予約語には安全な接尾辞を付けます。名前が重複した場合は、結果が毎回変わらないよう数値の接尾辞を追加します。元のキーはjson['original-key']とtoJson()のマップ内にそのまま残ります。ネストしたクラス名には完全なパスを使うため、無関係な住所オブジェクトが意図せず同じクラスにまとめられることはありません。
1つのサンプルだけではAPIの仕様全体を証明できません。JSON文字列が日付、UUID、enumとして自動認識されることはなく、空の配列から要素型を判断することもできません。同じオブジェクトメンバー名が重複している場合も、JSONパーサーは通常最後の値だけを保持するため、往復変換の安全性は保証されません。本番環境で使う前に、生成モデルをAPIドキュメントやスキーマと照合してください。ブラウザでの処理量を抑えるため、入力サイズ、ネストの深さ、推論する宣言数、出力サイズには上限があります。
よくある質問
いいえ。解析、型推論、コード生成、コピー、ダウンロードはブラウザ内で行われます。JSONと生成されたDartコードが当社のサーバーへ送信されたり、URLに入ったりすることはありません。
はい。FlutterはDartを使用するため、外部パッケージに依存しないこれらのクラスをFlutterプロジェクトで利用できます。まず、推論された型を実際のAPI仕様と照合してください。
いいえ。パッケージやbuild_runnerに依存せず、手動のfromJsonと任意のtoJsonメソッドを生成します。
null、または欠落していることが確認されたフィールドはnullableになります。サンプルが実データを十分に表していない場合は、生成するすべてのフィールドをnullableにできます。
いいえ。結果に反映されるのは、確認できた値だけです。複数のオブジェクトサンプルを使い、提供元のスキーマやドキュメントと結果を比較してください。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
EditorConfig ジェネレーター
インデントのスタイルとサイズ、改行コード、文字コード、空白ルールを指定して .editorconfig ファイルを生成し、IDE やエディタをまたいで書式を統一できます。
メールアドレス検証ツール
メールアドレスを検証します。RFC 5322構文チェック、MXレコードのライブ確認に加え、ローカル部、ドメイン、長さの詳細を表示します。メールは送信されません。
HTML フォーマッター
ブラウザ内で HTML を 2 または 4 スペースで整形します。HTML はアップロードも検証もされません。
このツールは他の言語でも利用できます
- JSON till Dart-konverterare [SV]
- محول JSON إلى Dart [AR]
- Convertisseur JSON vers Dart [FR]
- Konverter JSON ke Dart [ID]
- JSON-in-Dart-Konverter [DE]
- JSON to Dart 변환기 [KO]
- JSON-naar-Dart-converter [NL]
- ตัวแปลง JSON เป็น Dart [TH]
- Konwerter JSON na Dart [PL]
- Conversor de JSON a Dart [ES]
- Trình chuyển JSON sang Dart [VI]
- Conversor de JSON para Dart [PT]
- JSON to Dart Converter [EN]
- Convertitore da JSON a Dart [IT]
- Конвертер JSON в Dart [RU]
- JSON'dan Dart'a Dönüştürücü [TR]
- JSON 转 Dart 工具 [ZH]