Ruby → JSON 変換ツール
Ruby のクラス、ハッシュ、オブジェクトを貼るだけ。きれいな JSON を返します。
このツールでできること
属性がたくさんある Ruby クラスから、テストや API 呼び出し、フィクスチャ用の JSON ペイロードを手書きするのは正直しんどい作業です。Ruby をここに貼れば、すべてのフィールドを保ったまま有効な JSON が返ってきます。単一の Order クラスでも、アドレスを持つネストした Customer でも、Rails のモデル定義ファイルまるごとでも、実行時に to_json で得られるのと同じ出力になります。
この変換ツールは、Ruby が実際にどうシリアライズするかを踏まえて動きます。json 標準ライブラリは :symbol キーを文字列に変換し(JSON のキーは文字列のみなので)、nil は null になり、Time や Date は ISO-8601 文字列として出てきます。シンボルキーと文字列キーを混ぜたハッシュはどちらも正規化され、混合型の配列もそのまま保たれます。ネストしたインスタンス — Order の中の Address など — は文字列化ではなく、ネストした JSON オブジェクトに展開されます。詳しくは ruby-doc.org を参照してください。
gem や Rails アプリのファイルまるごとを貼り付けると、トップレベルの各クラスがそれぞれ独立した JSON エントリとして出力され、initialize で設定されるインスタンス変数も出力に反映されます。attr_accessor、attr_reader、素の @ivars すべてを拾います。Struct や OpenStruct を見つけた場合も、メンバーを同じ扱いで処理します。メソッドはスキップされ、データだけが JSON に入ります。
使い方
ステップは 3 つ。数行貼るのも models/ フォルダ全部貼るのも同じ操作です。
Ruby を貼り付ける(またはサンプルを試す)
左側のエディタに Ruby をそのまま貼ってください。クラス定義、ハッシュリテラル、複数クラス、.new インスタンス — どれも OK です。最初に実例を見たい場合は サンプルを読み込む をクリックしてください。
コードを削る必要はありません — Ruby の構文、require 行、コメントはそのままで大丈夫です。データでない部分はパーサが無視します。エッジケースについては JSON 標準ライブラリのドキュメント が参考になります。
「変換」を押す
緑色の 変換 ボタンをクリック。ツールが Ruby を読み取り、すべてのクラスと属性を保ったまま一度に JSON を出力します。処理中は短いローディング表示が出ます。
JSON をコピー
右側のパネルに、インデントされた 仕様準拠 の JSON が表示されます。Postman のリクエスト、テストフィクスチャ、Rails の seeds ファイル、API ドキュメントなどにコピーしてください。
こんなときに便利
RSpec のテストフィクスチャ
20 の属性を持つ Order モデルで、外部サービスをスタブするための JSON が必要。クラスを貼ってペイロードを取得し、spec に貼り付けるだけ。
Rails アプリのシード
大量の <code>Product.new(...)</code> 行を、db/seeds 用やステージングのデータローダ用の JSON シードファイルに変換 — 手打ち不要。
モデルと一致するドキュメント
Ruby クラスから直接 README や API リファレンス用の JSON サンプルを生成。ドキュメントがコードとズレる心配がありません。
シリアライズ問題のデバッグ
<code>to_json</code> の挙動がおかしいときは、Ruby をここに貼って期待される JSON の形を確認し、アプリが実際に送っているものと比較できます。
よくある質問
複数のクラスをまとめて貼っても大丈夫ですか?
はい。ファイルまるごと貼って大丈夫です。トップレベルの各クラスがそれぞれ独立した JSON エントリとして出力され、ネストしたクラスはネストしたオブジェクトに展開されます。メソッドは無視され、インスタンス変数とその値だけが出力に入ります。
シンボルと文字列キーはどう扱われますか?
JSON のキーは文字列のみなので、:name は "name" になります — json 標準ライブラリ と同じ挙動です。シンボルキーと文字列キーが混在するハッシュでも、出力では両方とも文字列に正規化されます。
Time、Date、BigDecimal はどうなりますか?
Time と DateTime は ISO-8601 文字列になります。Date は ISO 形式の日付文字列です。BigDecimal は JSON の数値になります。nil は null です。Range と正規表現は文字列化されます — 他の標準型は Ruby のデフォルトの to_json と同じマッピングです。
Struct と OpenStruct には対応していますか?
はい。メンバー :name, :price を持つ Struct は、それらをキーに持つ JSON オブジェクトとしてシリアライズされます。OpenStruct も同じで、動的属性を拾って出力します。
コードは保存されますか?
Ruby は変換のためにバックエンドに送られますが、永続化はしません — ペイロードをログに残すことはありません。オンラインツール全般の常ですが、本当に機密性の高いコードなら一応中身を確認してから使ってください。
コードにメソッドやブロックが含まれている場合は?
メソッドとブロックはスキップされます — データではないからです。JSON にはクラス名、initialize 由来のインスタンス変数、リテラル値だけが入るので、モデルの残りの部分はきれいに出力されます。
あわせて便利なツール
Ruby → JSON は一部です。これらと組み合わせるとさらに便利です: