左に C を貼って "Convert" を押してください。JSON に変換しますC コードを貼り付け

このツールでできること

C の struct を映した JSON ペイロードが欲しい場面 — gcc でビルドしたサービスのテスト、組み込みデバイスの設定、ドキュメントの一部など — で、毎回同じ流れになりませんか。cJSON を入れて、フィールドごとの glue コードを書いて、ビルドして、デバッグして。ここに C を貼れば、Makefile に触らずに有効な JSON が返ってきます。指定初期化子ひとつでも、複数の struct を含むヘッダーでも、ネストした型や配列があっても結果は同じ。すべてのフィールドを保ったきれいな JSON ドキュメントになります。

このコンバーターは C の値が実際にどうシリアライズされるかを理解しています。intlongsize_tfloatdouble はすべて JSON の number になります。char 配列と文字列リテラルは JSON の string に。stdbool.hbooltrue/false に。固定長配列 (int items[3]) は正しい長さの JSON 配列に。ネストした struct — たとえば Order の中の Address — はネストした JSON オブジェクトに展開されます。挙動は C 言語リファレンスに沿っています。

C99 の指定初期化子 (.field = value) は完全サポート。今の現場で struct リテラルを書くときの普通のスタイルです。typedef のエイリアスは解決されます。enum の値は、コンテキストに応じて数値かシンボル名のどちらかで出ます。union はアクティブなメンバーをシリアライズします。NULL を指すポインターは JSON の null に、それ以外は指している先の値を展開します。複数の struct を一度に貼れば、それぞれが出力のトップレベルキーになります。

使い方

ステップは 3 つ。2 行の初期化子でも、typedef が 20 個あるヘッダーでも同じ手順で動きます。

1

C を貼る (またはサンプルを読み込む)

左のエディターに C をそのまま貼ってください。struct 定義typedef指定初期化子複数の structネストした配列 — どれでも OK。Load Sample を押せば、実際に近いサンプルを先に確認できます。

#include ディレクティブやコンパイラ固有の属性を外す必要はありません。ISO C の構文そのままでパーサーが処理します。C89 でもモダン C (C11/C17/C23) でも大丈夫です。

2

Convert を押す

緑の Convert ボタンをクリック。ツールは C を読み、各 struct をたどり、初期化子を展開して、一度で JSON を出します。処理中はローディングインジケーターが表示されます。

3

JSON をコピー

右のパネルにインデント付きの JSON が出ます。HTTP クライアント、組み込みファームウェアの設定、テストフィクスチャ、README にコピーしてください。これで一連の流れは終わり。ビルドのステップはありません。

実際に役立つ場面

組み込みの設定とファームウェア

C のデバイス設定 struct があって、REST エンドポイントやプロビジョニングツール用に JSON 版が必要。struct を貼って、JSON を取って、デプロイ。

API リクエストのペイロード

サードパーティ API をラップする C サービス。リクエスト struct を貼れば、本番で cJSON を繋ぐ前に curl で試せる JSON が手に入ります。

ユニットテストのフィクスチャ

ユニットテストの指定初期化子を、統合テストやゴールデンファイル比較用の JSON シードファイルに変換します。

コードと一致するドキュメント

README やプロトコルドキュメント用の JSON サンプルを、実際の struct から直接生成。ヘッダーファイルとドキュメントがずれません。

よくある質問

cJSON や Jansson を入れておく必要はありますか?

いいえ。このツールはサーバー側で動き、あなたのコードをコンパイルしません。シリアライゼーションライブラリを引き込まずに JSON が得られます。ランタイムで使うなら cJSON が定番。Jansson もよい選択肢です。

指定初期化子や typedef は理解しますか?

はい。C99 の指定初期化子 (.field = value) は完全サポート。typedef のエイリアスも元の struct まで解決します。ネストした指定初期化子も、コンパイラが展開するのと同じ形に展開されます。

配列、ポインター、NULL はどうなりますか?

固定長配列は正しい要素数の JSON 配列になります。NULL のポインターメンバーは JSON の null に、それ以外は指している先が展開されます。struct の配列も同じで、各要素がネストした JSON オブジェクトになります。

enum や union はどう扱われますか?

enum の値はコンテキストに応じてシンボル名か数値で出ます。union は現在アクティブなメンバーをシリアライズ。ビットフィールド (unsigned flags : 4) は数値になります。

コードは保存されますか?

コードは変換のためにバックエンドに送られますが、保持はしません。ペイロードのログも取っていません。コードが本当にセンシティブな場合 (シークレットを含む組み込みファームウェアや内部プロトコルの詳細など) は、貼る前に一度確認してください。

C にマクロやコンパイラ拡張が入っていたら?

値に展開されるマクロは動きます。実ロジックを行う関数的マクロは不透明として扱い、処理を止めずに null として出力します。GCC や MSVC の属性 (__attribute____declspec) は許容して無視されます。

他にも役立つツール

C to JSON はパズルの 1 ピースです。相性のよいツールはこちら。