C++ to JSON コンバーター
C++ の struct やオブジェクトを貼り付けると、クリーンな JSON が返ります。
このツールでできること
C++ の struct と対になる JSON ペイロードが欲しくなった経験 — API に渡す、フィクスチャに使う、設定ファイルに落とし込む — があれば、いつもの流れはご存じのはずです。nlohmann::json を引き込み、to_json のグルーコードを書き、ビルドし直す。ここに C++ を貼り付ければ、そのどれも踏まずに有効な JSON が返ります。単一の初期化子でも、複数の struct を詰め込んだヘッダファイル一式でも、ネストした template 祭りでも — 結果は同じで、フィールドが保たれた素直な JSON ドキュメントになります。
コンバーターは C++ の値が実際にどうシリアライズされるかを理解しています。std::string は JSON の文字列へ、49.99f や 42u のような数値リテラルはサフィックスを落とした JSON 数値へ、bool は true/false へ、std::vector<T> / std::array<T,N> は JSON 配列へ。std::optional<T> が std::nullopt なら null に、値があれば中身の型をそのままシリアライズします。文字列キーを持つ std::map や std::unordered_map は、cppreference の流儀どおり JSON オブジェクトになります。
C++20 の指示付き初期化子(.field = value)も、集成体の初期化子リストも扱えます。複数の struct をまとめて貼り付ければ、それぞれが JSON のトップレベルエントリとして並び、ネストした型も展開されます。Boost.JSON の世界から来た方なら、boost::json::value_from の出力とほぼ同じもの、と考えて差し支えありません — template のアクロバットは抜きで。
使い方
3 ステップです。単一の初期化子リストでも、struct が 10 個以上詰まったヘッダでも同じ流れ。
「変換」を押す
緑色の 「変換」 ボタンをクリックすると、ツールが C++ を読み取り、すべての struct とフィールドを保持したまま JSON を一気に出力します。処理中は短いロード表示が出ます。
JSON をコピー
右側のパネルにインデント済みの JSON が表示されます。REST 呼び出し、テストフィクスチャ、CMakeLists の近くに置く設定、ドキュメントなどに貼り込んでください。これで一周です。
実際に便利な場面
API リクエストのペイロード
C++ のリクエスト struct があって、curl や Postman に投げる JSON が欲しい。struct を貼り付けて、JSON を持ち帰り、次の作業へ。
設定ファイルのテンプレート
メンバーが 40 個ある Settings 構造体が、そのまま編集できる JSON テンプレートに。手書きの足場も、書き忘れのキーも不要です。
コードとズレないドキュメント
README や API リファレンス用の JSON 例を、実際の struct から生成。ドキュメントが実装から乖離していく問題を止められます。
テストフィクスチャとシード
ユニットテストの初期化子リストを、そのまま統合テスト・モックサーバー・DB ローダー用の JSON シードへ変換できます。
よくある質問
nlohmann::json や Boost をインストールする必要はありますか?
いいえ。このツールはサーバーサイドで動き、あなたのコードを実行することはありません — シリアライズライブラリを入れなくても JSON が手に入ります。ランタイムでライブラリを使いたいなら、nlohmann/json と Boost.JSON はどちらも堅実な選択です。
std::optional、std::variant、スマートポインタは扱えますか?
std::optional<T> が std::nullopt なら null、値があれば中身の型をシリアライズします。std::unique_ptr と std::shared_ptr も同じ扱いで、空なら null、そうでなければ指している値を出します。std::variant は、その時点でアクティブな選択肢を使います。
std::vector や std::map のようなコンテナはどうなりますか?
std::vector、std::array、std::list、std::set、std::deque はすべて JSON 配列になります。文字列キーの std::map / std::unordered_map は JSON オブジェクトに、文字列以外のキーは cppreference のコンテナセマンティクスに従って文字列化されます。
複数の struct を一度に貼り付けても大丈夫?
はい — ヘッダ一式でも .cpp ファイルでも貼り付けてください。トップレベルの集成体がそれぞれ JSON の独自キーとして出力され、ネストした型も展開されます。基底クラスから継承したメンバーも含みます。
送ったコードは保存されますか?
コードは変換のためにバックエンドへ送られますが、永続化はしていません — ペイロードのログも取っていません。とはいえ、本当に機密性の高いコードを貼る前に、一度目を通しておくことをおすすめします。
template やマクロ、ラムダが含まれていたら?
具体型で実体化された template は問題なく動きます。未実体化の template、マクロ、ラムダは、変換全体を落とすのではなく null として出力するので、残りのデータはそのまま出てきます。明らかな構文エラーは先に直してください — パーサーは寛容ですが、コンパイラそのものではありません。
あわせて使える他のツール
C++ to JSON はパズルの 1 ピースです。これらは相性がよいです: