JSON から C++
内容はまだありません
無料オンラインJSONからC++ツール。JSONを貼り付けると、コンパイル可能なC++ struct / classヘッダーファイルコードが自動生成されます。nlohmann/jsonまたはrapidjsonでAPIレスポンスを逆シリアル化するのに適しており、ネストオブジェクトは独立したクラスに自動分割され、std::vectorとstd::optionalは自動的に処理されます。純ブラウザローカル実行。
関連おすすめ
JSONからC++について:JSONデータをコンパイル可能なC++構造体に変換する
JSONからC++は、JSON形式のデータ(オブジェクトまたは配列)をC++ struct / class型定義に変換するプロセスです。C++は強い型付けシステムプログラミング言語であり、バックエンドサービス、ゲームエンジン、組み込みファームウェア、クオンツ取引、高性能サービス、デスクトップクライアントなどのシナリオで広く使用されています。開発では、APIドキュメントまたは実際のレスポンスのJSONサンプルをC++型に変換する必要が頻繁にあります。手書きのstructは繰り返しの作業が多いだけでなく、フィールド型を間違えやすいため、本ツールの目的はこのプロセスを自動化することです。C++はJava、Python、JavaScriptとは異なり、JSONのような動的構造に対するネイティブサポートが不足しているため、「JSONからC++」はエンジニアリングの世界で長い間「繰り返しだが省略できない」作業と見なされてきました。
本ツールはブラウザローカルでquicktype-coreに基づいて実行され、CPPレンダラーとjust-typesレンダリングオプションを使用して、C++用にstd::string / std::vector<T> / std::optional<T>ベースの構造体コードを生成します。生成されるのはheader-only標準C++コードであり、サードパーティのJSON解析ライブラリに依存せず、任意のC++17 / C++20プロジェクトに直接#includeできます。nlohmann/jsonまたはrapidjsonパーサーと組み合わせると、APIレスポンスの逆シリアル化をすばやく完了できます。レンダリングプロセス全体はWeb Workerを介してブラウザ内で非同期に実行され、メインスレッドはスムーズな応答を維持します。
型推論はJSONからC++の中核です。ツールはJSONの基本型をC++の標準型にマップします:文字列はstd::stringに、整数はint64_t(long longと互換性があり、クロスプラットフォームのlongサイズの違いを回避)に、浮動小数点数はdoubleに、ブール値はboolに、配列はstd::vector<T>に、ネストオブジェクトは独立したstruct / classに、null値はstd::optional<T>にマップされます。ネストオブジェクトの場合、ツールは各レベルに新しいclassを自動的に作成し、PascalCaseで命名します。例えばaddressフィールドはAddress構造体を生成し、items配列内のオブジェクトはItem構造体を生成します。同じJSONネストレベルは1回だけ生成され、重複定義されません。
JSONをサーバーにアップロードして処理する必要がある一部のオンラインツールとは異なり、本ツールのすべての計算はブラウザ内で完了します。quicktype-coreはWeb Workerを介してロードおよび実行され、JSON解析、型推論、C++コード生成、ファイルダウンロードはすべてローカルで行われ、いかなるサーバーにもデータを送信しません。これはAPI key、ユーザープライバシーフィールド、または未公開ビジネス構造を含むJSONにとって特に重要であり、ページを閉じるとデータはメモリから消去されます。企業ネットワーク環境、内部監査要件、またはオフライン開発シナリオに関係なく、本ツールはquicktypeコマンドラインツールと同等の信頼性を提供できます。
生成後のコードは通常、JSONパーサーと組み合わせて使用する必要があります。主な選択肢は2つあります:① nlohmann::json(推奨、シングルヘッダー導入、テンプレートシリアル化インターフェースがフレンドリー、nlohmann::json j = nlohmann::json::parse(str); User u = j.get<User>();のような書き方);② rapidjson(高性能SAX / DOMスタイル解析、金融、ゲームなどの極限シナリオに適しており、手動でGetObjectフィールドを抽出する必要があります)。組み込みの場合は、ArduinoJson(リソース制約)またはcJSON(Cスタイルインターフェース)を使用することもできます。本ツールのコードはすべての主要なC++ JSONライブラリと互換性があり、特定のエコシステムに強制的にバインドされません。
注意すべき点として、自動生成されたコードは出発点であり、終点ではありません。ツールはJSONサンプルに基づいて型を推論するため、ビジネス上の正確な型を判断できません(例えばURL、Email、IDなどのセマンティック型はすべてstd::stringとして一律に推論されます)。snake_caseのJSONフィールドの場合、C++ structフィールドは元の名前のまま生成されます。NLOHMANN_DEFINE_TYPE_INTRUSIVEまたはNLOHMANN_JSON_FROM / NLOHMANN_JSON_TOを手動で追加してマッピング関係を宣言する必要がある場合があります。生成結果を最初のドラフトとして使用し、プロジェクトの規則に従ってフィールド名、型、シリアル化注釈を微調整することを推奨します。この「AIが最初のドラフトを書き、エンジニアがレビューする」ワークフローは、多くのC++チームの実際のペースでもあります。
クロスチームコラボレーションシナリオでは、JSONからC++も統一データモデルの架け橋です。フロントエンドはJSONからTypeScriptを使用し、バックエンドはJSONからJava / Go / Rustを使用し、組み込みとパフォーマンスサービスはJSONからC++を使用します。4つのエンドが同じJSONサンプルを使用してそれぞれの型定義を生成することで、フィールドの一貫性を最大限に保証できます。本ツールはこのワークフローの「C++エンド」であり、サイト内の他のJSONからTypeScript / Java / Rust / Go / Pythonツールと同時に使用できます。
一言でまとめると:あなたのコードがパフォーマンス重視、強い型付け、エコシステムが豊富なC++プロジェクトで実行されており、JSONのような動的データを強い型付けの世界に迅速に接続する必要がある場合、本ツールはJSONサンプルをC++構造体に直接コンパイルするためのショートカットエントリです。
ユースケース
- REST API統合:バックエンドから返されたJSONレスポンスをC++ structに変換し、nlohmann::json / cprと組み合わせて強い型付けHTTPリクエストの逆シリアル化を行います
- マイクロサービスインターフェース定義:gRPC / HTTPサービスのリクエストボディサンプルJSONをC++型に変換し、サーバー側モデル定義を統一します
- 組み込みとIoT:デバイスから報告されたJSONセンサーデータをC++ structに変換し、ArduinoJsonまたはESP-IDF JSON Parserと組み合わせてMQTT / HTTPメッセージを解析します
- ゲーム開発:レベル設定、キャラクタープロパティJSONをC++ structに変換し、Unreal EngineやCocos2d-xなどのエンジンが.jsonデータファイルを読み取りやすくします
- 金融高頻度取引:取引所のJSONインターフェースレスポンス(OKX / Binance / Xueqiu行情など)をC++ structに変換し、rapidjsonと組み合わせてナノ秒レベルの解析を行います
- C++ Qtクライアント:サーバー側のJSON設定をC++ structに変換し、QJsonObject / QJsonDocumentと組み合わせてGUIデータロードを行います
- Boost.JSON / Boost.Beast:HTTPサービスのJSONレスポンスをC++ structに変換し、Boost.JSONと組み合わせて逆シリアル化を行い、Webバックエンドを作成します
- 組み込みRTOS:FreeRTOS / Zephyrシステム設定JSONをC++ structに変換し、cJSONと組み合わせてファームウェアパラメーターの読み取りを行います
- アルゴリズム / クオンツ:バックテストシステムのJSON設定をC++ structに変換し、A/B実験設定管理とバージョン追跡を容易にします
- データベース移行:MongoDB / PostgreSQLからエクスポートされたJSONドキュメントをC++モデルに変換し、cpp-httplib / libpqxxエンティティフィールドの参照とします
- オーディオビデオ / マルチメディア:FFmpeg / GStreamer設定JSONをC++ structに変換し、メディアパイプラインパラメーターの読み取りを容易にします
- シミュレーションとモデリング:シミュレーションシステムのJSON入力設定をC++ structに変換し、異なるサブモデルの入力データ形式を統一します
- テストデータ構築:バックエンドから返された実際のJSON fixtureをC++型に変換し、Google Test / Catch2単体テストで構造化アサーションを行います
- ログ構造化解析:ELK / LokiによってキャプチャされたJSONログをC++型に変換し、フィルタリングとアラートルールを容易にします
- 設定センター移行:Apollo / Nacos / ConsulのJSON設定をC++型に変換し、サーバー側設定のホットリロードに使用します
- クロス言語コラボレーション:バックエンドC++とフロントエンドTypeScript / Javaの統合時に、同じJSONをそれぞれC++ structとTS interface / Java POJOに変換して両端の一貫性を維持します
- 教育とトレーニング:C++コースでサンプルJSONをstructに変換し、nlohmann::jsonの逆シリアル化プロセスとテンプレートメタプログラミングの概念をデモンストレーションします
- フィールド命名変換:snake_caseのJSON APIレスポンスをC++構造体に変換した後、手動でNLOHMANN_DEFINE_TYPE_INTRUSIVEを追加してフィールドマッピングを行います
使い方
- 左側のエディタにJSONコンテンツ(JSONオブジェクトを推奨)を貼り付けるか、アップロードボタンをクリックして.json / .txtファイルを選択します
- ツールはWeb Workerを介してquicktype-coreを使用し、400ms以内に自動変換します。右側にstd::string / std::vector<T> / ネストclassを含むC++ヘッダーファイルコードが表示されます
- JSON形式にエラーがある場合は赤いプロンプトが表示されます。「JSONを修復」ボタンをクリックして、末尾のカンマ、単一引用符などの一般的な問題を自動修復してから再試行してください
- 生成されたstruct / class名、フィールド型が期待どおりか確認してください;調整が必要な場合は、ソースJSONのkey名を変更して再変換できます
- 「コピー」をクリックしてコードをIDEの.h / .hppファイルに貼り付け、nlohmann/jsonまたはrapidjsonで実際のAPIレスポンスを逆シリアル化します;または「ダウンロード」をクリックしてmodel.h / model.hppとして保存します
特徴
- ローカルブラウザ変換:JSON解析とC++コード生成はすべてブラウザ内でWeb Worker + quicktype-coreを介して実行され、元のデータはサーバーにアップロードされません
- nlohmann::jsonスタイル出力:std::string / std::vector<T> / double / int64_t / boolなどのSTL型構造体を自動生成し、nlohmann::jsonの逆シリアル化の習慣に近く、<nlohmann/json.hpp>を直接インクルードして解析できます
- rapidjson互換:生成される純粋なC++ structはサードパーティライブラリに依存せず、rapidjson Document / GenericValueと組み合わせて高性能解析シナリオに使用できます
- 自動型推論:JSON文字列はstd::stringに、整数はint64_t / long longに、浮動小数点はdoubleに、ブール値はboolに、配列はstd::vector<T>に、ネストオブジェクトは独立したclass / structにマップされます
- ネストオブジェクトの自動分割:ネストJSONは独立したclass / struct(PascalCase命名)を自動生成し、同じ型の重複定義を回避します
- std::vectorとstd::optionalの自動処理:JSON配列はstd::vector<T>に変換され、nullになる可能性のあるフィールドはstd::optional<T>にフォールバックされ、モダンC++17 / C++20のプラクティスに準拠します
- 400msデバウンス自動変換:JSONを貼り付けると自動的に変換がトリガーされ、右側にC++ヘッダーファイルコードがリアルタイムでプレビューされ、待ち時間と余分なクリックを削減します
- JSONエラーワンクリック修復:末尾のカンマ、単一引用符、引用符の欠落などの一般的なフォーマットエラーを自動修復し、修復成功後にコード生成を続行します
- コードハイライト + ワンクリックコピー:右側のCodeMirrorでC++構文ハイライトがレンダリングされ、ヘッダーファイル全体をワンクリックでコピーするか、.h / .hppファイルとしてダウンロードしてプロジェクトに直接配置できます
- localStorage入力履歴 + レスポンシブ分割:最近の入力を自動保存し、ページを更新したり誤って閉じたりした後にすばやく復元できます;左側にJSONを貼り付け、右側でC++コードを表示し、パネル幅のドラッグ調整をサポートし、大画面とモバイルに適応します
- ゼロ依存header-only成果物:生成される.h / .hppはheader-only形式で、標準C++プロジェクトに単一ファイルでインクルードでき、追加のビルド設定なしでnlohmann::json / rapidjson / Boost.JSONと組み合わせて使用できます
- snake_caseからcamelCaseへの組み込み変換:JSONのsnake_caseフィールドをC++で推奨されるcamelCaseフィールド名に自動変換でき、NLOHMANN_DEFINE_TYPE_INTRUSIVEと組み合わせてsnake_caseシリアル化マッピングを維持します
コード例
C++:nlohmann/jsonを使用して本ツールで生成されたstructを逆シリアル化
cpp生成されたUser構造体を.hppに配置し、nlohmann::jsonと組み合わせて逆シリアル化します(モダンC++17/20プロジェクト推奨)。
// model.hpp(本ツールで生成)
// #pragma once
// #include <cstdint>
// #include <optional>
// #include <string>
// #include <vector>
// struct Address {
// std::string city;
// std::string zip;
// };
// struct User {
// int64_t id;
// std::string name;
// std::optional<Address> address;
// std::vector<std::string> tags;
// };
#include <nlohmann/json.hpp>
#include "model.hpp"
using nlohmann::json;
int main() {
std::string raw = R"({
"id": 1,
"name": "Alice",
"address": { "city": "Beijing", "zip": "100000" },
"tags": ["cpp", "nlohmann"]
})";
// 1) JSON文字列を解析
json j = json::parse(raw);
// 2) 本ツールで生成されたstructに強い型付けで逆シリアル化
User u = j.get<User>();
// 3) フィールドにアクセス
std::cout << u.name << " lives in "
<< (u.address ? u.address->city : "unknown")
<< std::endl;
for (const auto& tag : u.tags) {
std::cout << "tag: " << tag << std::endl;
}
return 0;
}
/*
* コンパイル(CMakeプロジェクト):
* find_package(nlohmann_json REQUIRED)
* target_link_libraries(my_app PRIVATE nlohmann_json::nlohmann_json)
* コンパイル(vcpkg):
* vcpkg install nlohmann-json
* 単一ファイル統合:
* https://github.com/nlohmann/json/releases からjson.hppを直接ダウンロード
*/C++:rapidjsonを使用してJSONを本ツールで生成されたstructに解析
cpprapidjsonはカスタムstructへの自動逆シリアル化をサポートしていないため、手動でGetObject抽出する必要があります。金融 / ゲームなどの高性能シナリオに適しています。
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
#include "model.hpp"
int main() {
const char* raw = R"({
"id": 1,
"name": "Alice",
"address": { "city": "Beijing", "zip": "100000" },
"tags": ["cpp", "rapidjson"]
})";
// 1) rapidjson DOM解析
rapidjson::Document doc;
doc.Parse(raw);
// 2) 本ツールで生成されたstructを構築し、手動で埋める
User u;
u.id = doc["id"].GetInt64();
u.name = doc["name"].GetString();
if (doc.HasMember("address") && doc["address"].IsObject()) {
Address addr;
addr.city = doc["address"]["city"].GetString();
addr.zip = doc["address"]["zip"].GetString();
u.address = addr;
}
for (auto& tag : doc["tags"].GetArray()) {
u.tags.push_back(tag.GetString());
}
// 3) 埋められたstructを使用
std::cout << u.name << ", tags=" << u.tags.size() << std::endl;
return 0;
}
/*
* rapidjson高性能のコツ:
* ① rapidjson::MemoryPoolAllocatorとStringBufferを組み合わせるとさらに高速化できます;
* ② 高頻度シナリオではSAXスタイルのReader / Writerを使用して直接ストリーミング処理できます;
* ③ RAPIDJSON_SSE42 / RAPIDJSON_SIMDマクロを有効にするとCPU SIMD命令を使用して高速化できます。
*/C++:NLOHMANN_DEFINE_TYPE_INTRUSIVEでsnake_caseフィールドマッピングを処理
cppJSONフィールドがsnake_caseで、C++メンバーにcamelCase / PascalCaseを使用したい場合、nlohmann/jsonマクロを使用してマッピングを宣言します。
#include <nlohmann/json.hpp>
#include <string>
#include <cstdint>
// 本ツールがsnake_caseでフィールドを生成すると仮定:user_name, created_at
// 実際のプロジェクトでcamelCaseにリネームする場合は次のようなマクロを追加
struct UserProfile {
int64_t id;
std::string userName; // JSONでは "user_name"
std::string emailAddress; // JSONでは "email_address"
std::string createdAt; // JSONでは "created_at"
};
// NLOHMANN_DEFINE_TYPE_INTRUSIVEをクラス内部で使用してマッピングを宣言
// 注意:public領域に配置する必要があります
//
// NLOHMANN_DEFINE_TYPE_INTRUSIVE(UserProfile, id, userName, emailAddress, createdAt)
// または非侵入型マクロを使用(クラス自体の変更を回避):
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(UserProfile, id, userName, emailAddress, createdAt)
// 使用法:
int main() {
nlohmann::json j = {
{"id", 1},
{"user_name", "Alice"},
{"email_address", "al********@***********"},
{"created_at", "2026-07-14T10:00:00.000Z"}
};
UserProfile p = j.get<UserProfile>();
// シリアル化時も元のフィールド名で出力されます
std::cout << j.dump(2) << std::endl;
return 0;
}
/*
* ヒント:
* ① 侵入型マクロ(NLOHMANN_DEFINE_TYPE_INTRUSIVE)はpublic領域に配置する必要があります;
* ② 非侵入型マクロ(NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE)はクラスの外側に定義します;
* ③ フィールドの順序はマクロパラメータと厳密に一致させる必要があります;
* ④ 日付フィールドはnlohmann::jsonカスタムadl_serializerを使用してISO 8601形式を処理できます。
*/Best Practices
逆シリアル化方法の選択:nlohmannそれともrapidjson?
ほとんどのチームは最初にnlohmann::jsonを使用することを推奨します。理由はAPIがSTLに似ており、逆シリアル化時にj.get<User>()の1行で完了でき、可読性が非常に高いからです。毎秒百万レベルのJSONフィールド抽出などのパフォーマンスボトルネックに遭遇した場合にのみrapidjsonに切り替えてください。本ツールで生成される構造体は両方と組み合わせることができます。
nlohmann/jsonリポジトリrapidjsonリポジトリCMakeプロジェクトではFetchContentでnlohmann/jsonを導入することを推奨
include(FetchContent) + FetchContent_Declare(nlohmann_json URL ...)を使用するのが、CMakerがnlohmann/jsonを統合する最もクリーンな方法であり、vcpkgをプリインストールする必要はありません;FetchContentを構成したくない場合は、vcpkg install nlohmann-jsonを使用するか、json.hppシングルファイルを直接ダウンロードしてインクルードできます。
CMake FetchContent公式ドキュメントsnake_case JSONフィールドは変換後にNLOHMANNマクロを追加する必要があります
ツールはデフォルトでJSONの元のフィールド名(snake_case)を保持します。C++メンバーをcamelCaseまたはPascalCaseにしたい場合は、クラス内部にNLOHMANN_DEFINE_TYPE_INTRUSIVE(UserProfile, id, userName, ...)を追加してJSON keyとC++メンバーを明示的にマップする必要があります。そうしないと逆シリアル化が失敗します。
NLOHMANN_DEFINE_TYPE_INTRUSIVEドキュメントC++標準が異なる場合のstd::optionalの置き換え方法
C++17+ではstd::optional<T>を直接使用します;C++11/14プロジェクトはboost::optional<T>(#include <boost/optional.hpp>)に置き換えます;CスタイルプロジェクトはcJSON + センチネルフィールド(-1、空文字列)を使用してnull許容を表現します。std::optionalとboost::optionalのインターフェースにはわずかな違いがあることに注意してください(has_value()対is_initialized())。
cppreference std::optional組み込みMCUではstd::vector / std::stringを直接使用しないでください
Arduino Uno / ESP8266などのRAMが非常に小さいデバイスでは、std::vectorとstd::stringは通常OOMをトリガーします。代わりにArduinoJson 6.x + StaticJsonDocument<容量>でバッファーを制限し、std::vector<T>を固定サイズstd::array<T, N>に、std::stringをconst char* + 長さに置き換えてください。
ArduinoJsonドキュメント機密JSONはアップロードしないでください
本ツールのすべての解析、コード生成、ファイルダウンロードはブラウザローカルでWeb Workerを介して完了し、元のJSONはいかなるサーバーにもアップロードされません。ただし、依然として推奨します:① 内部ビジネスモデルは最初にデータマスキングを行う(token / 携帯電話番号などを削除);② ページを閉じるとメモリから消去される;③ 大企業のコンプライアンスシナリオでは、顧客情報を含むJSONはIDE内でローカルquicktypeコマンドラインを使用して処理することを推奨します。
ネストレベルが深すぎる場合は構造体を分割してください
6レベルを超えるネストJSONはソース側でリファクタリングするか、本ツールで生成後に手動で深いネストを中間構造体に分割して可読性とコンパイル速度を向上させることを推奨します。深いネストはテンプレートのインスタンス化深度が深すぎる原因となり、一部の古いコンパイラ(GCC 6以下)は「template instantiation depth exceeded」エラーを報告します。
ファイル拡張子として.hではなく.hppを使用してください
本ツールで生成されるコードは本質的にC++です(std::optional / templateなどのC++機能を使用しています)。「C++ header」を示すために.hpp拡張子を使用し、C headerの.hと区別することを推奨します。CMakeプロジェクトでは:set_target_properties(target PROPERTIES CXX_EXTENSIONS ON);CMakeも.h対.hppを介してgccとg++のどちらでコンパイルするかを自動的に認識でき、header-onlyテンプレートが再インスタンス化されない問題を最大限に回避できます。
GCCファイル拡張子規則CMakeファイルタイプ認識よくある質問
JSONをC++構造体 / クラス定義に変換するには?
左側のエディタにJSONコンテンツを貼り付けます(ドラッグアンドドロップまたはクリックして.json / .txtファイルをアップロードすることもサポートされています)。ツールは400ms以内にquicktype-coreを呼び出してブラウザローカルでC++ヘッダーファイルコードを自動生成します;右側のCodeMirror領域にstd::string / std::vector<T> / ネストclassを含む構造体コードが表示されます。JSON形式にエラーがある場合は、「JSONを修復」ボタンをクリックして自動修復してから変換してください。
生成されるC++コードにはどのヘッダーファイルを含める必要がありますか?
ツールが出力するのは、C++標準ライブラリ(<string>、<vector>、<optional>、<cstdint>)のみに依存するheader-only構造体コードです。nlohmann/jsonで解析する場合は、追加で#include <nlohmann/json.hpp>が必要です;rapidjsonで解析する場合は、#include "rapidjson/document.h"が必要です。その他の標準ヘッダーファイルはツールが必要に応じて宣言します。
どのようなJSONデータ構造をサポートしていますか?
すべての有効なJSON構造をサポートしています:基本型(null、boolean、number、string)、配列(1次元または多次元)、ネストオブジェクト(任意の深さ)。JSONオブジェクトはルートstruct / classを生成し、JSON配列は上位構造体のフィールドにstd::vector<T>形式で表示されます。JavaScriptオブジェクトリテラル、関数、Symbol、undefinedなどの非JSON値はサポートしていません。
JSONフィールド型はどのようにC++型にマップされますか?
文字列はstd::stringにマップされ;整数はint64_t(古いコードとの互換性のためにlong longも一般的に使用されます)にマップされ;浮動小数点数はdoubleにマップされ;ブール値はboolにマップされ;配列はstd::vector<T>にマップされ;ネストオブジェクトは独立したstruct / classにマップされ;null値はstd::optional<T>にマップされます(nlohmann::jsonでフォールバックできます)。詳細なマッピングルールについては、ページ下部の「JSON型からC++型へのマッピング早見表」を参照してください。
null値はどのような型を生成しますか?
JSONのnull値はstd::optional<T>(C++17以降で使用可能)を生成し、フィールドが欠落しているか型が不確定である可能性があることを示します。フィールドの実際の型が既にわかっている場合は、ソースJSONにサンプル値(例えば"field": "" はstd::stringと推論されます)を指定し、生成後にビジネスニーズに応じてstd::optional<std::string>などのより正確な型に変更できます。
配列は自動的にstd::vectorに変換されますか?
はい。JSON配列は一様にC++ std::vector<T>テンプレートコンテナに変換され、要素型は配列の最初の項目に基づいて自動的に推論されます。例えば["a","b"]はstd::vector<std::string>を生成し、[1,2,3]はstd::vector<int64_t>を生成し、[{...},{...}]はstd::vector<Item>を生成します(Itemはネストオブジェクトから生成された独立したstructです)。
ネストオブジェクトはどのように処理されますか?
各ネストオブジェクトは独立したstruct / classを生成し、命名規則はフィールド名のPascalCaseです(例えばaddressフィールドはAddress構造体を生成し、items配列内のオブジェクトはItem構造体を生成します)。ルート構造体では、std::optional<Address>またはAddress型のメンバーを介してネストクラスを参照します。同じ構造のオブジェクトは同じ型を再利用し、重複定義を回避します。
生成されたコードはnlohmann/jsonで逆シリアル化できますか?
はい。典型的な使用例:nlohmann::json j; j["root"] = nlohmann::json::parse(raw_json); User u = j.get<User>(); 前提条件として、プロジェクトにnlohmann/jsonシングルヘッダー依存関係が導入されている(<nlohmann/json.hpp>を直接インクルード)こと、および本ツールで生成されたUser構造体が定義されていることが必要です。
生成されたコードはrapidjsonで逆シリアル化できますか?
はい。rapidjsonでは、GetObjectタイプのフィールド抽出コードを手動で記述する必要があります。典型的なパス:rapidjson::Document doc; doc.Parse(raw_json); const auto& obj = doc["root"]; std::string id = obj["id"].GetString(); rapidjsonはテンプレートによる自動逆シリアル化をサポートしていないため、生成されるstructはデータモデルの参照としてのみ機能します。
snake_case JSONフィールドはどのように処理されますか?
ツールはJSONの元のフィールド名を保持してC++フィールドを生成します(例:user_name)。C++メンバーにcamelCase(userName)またはPascalCase(UserName)を使用したい場合は、生成後に手動で変更し、JSNOMacros(NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_JSON_FROM / NLOHMANN_JSON_TO)を追加してマッピングを指定できます。
生成されたヘッダーファイルはQt / Unreal / Boostプロジェクトに直接配置して使用できますか?
はい。本ツールが生成するのはheader-only標準C++コードであり、特定のフレームワークに依存しません。Qt QJsonObjectで解析する場合は、構造体をデータモデルとして使用します(メンバーはQ_GADGETでマーク);Unreal Engineでは、FJsonObjectConverter::JsonObjectStringToUStructと組み合わせて使用します;Boost.JSONでは、JSONをboost::json::objectに解析した後、フィールドごとに抽出します。
データはサーバーにアップロードされますか?プライバシーは安全ですか?
完全にローカルブラウザで実行されます。すべてのJSON解析、C++コード生成、ファイルダウンロードはブラウザ内でJavaScript(Web Worker + quicktype-core)を介して完了し、入力されたJSONデータと生成されたC++コードはいかなるサーバーにもアップロードされず、クラウドに記録またはキャッシュされることもありません。API key、token、未公開ビジネスフィールドを含む機密JSONは安心して使用でき、ページを閉じると消去されます。
登録やログインは必要ですか?
必要ありません。ツールは完全に無料で、登録、ログイン、承認は必要ありません。ページを開くとすぐに使用でき、すべての機能はブラウザローカルで利用可能で、呼び出し回数やファイルサイズの制限はありません(ブラウザのメモリ制約を受けます)。
JSON形式エラーが発生した場合はどうすればよいですか?
ツールはJSONの正当性を自動的に検出し、エラー時には右側に赤いエラープロンプトを表示し、「JSONを修復」ボタンを提供します。クリックすると一般的なエラーを自動修復できます:末尾の余分なカンマ、単一引用符から二重引用符への置換、引用符が欠落しているkeyの引用符補完、コメントの削除など。修復が成功するとC++コードの生成が続行されます。
このツールはJSONからJava / Rustへの変換とどのように違いますか?
3つはすべてJSONをターゲット言語の型定義に変換しますが、出力形式が異なります:JSONからC++はheader-only struct / classを生成し、追加でnlohmann/jsonまたはrapidjsonを使用して逆シリアル化コードを記述する必要があります;JSONからJavaはgetter/setterを含む完全なPOJOクラスを生成し、直接コンパイルして実行できます;JSONからRustはSerde derive付きのstructを生成し、直接serde_jsonで逆シリアル化できます。選択はあなたの技術スタックに依存します。
トラブルシューティング
「JSONデータを入力してください」と表示されるか、右側が空です
左側の入力ボックスが空であるか、空白文字のみが含まれています。有効なJSONコンテンツが貼り付けられていることを確認するか、アップロードボタンをクリックして.json / .txtファイルを選択するか、サンプルボタンをクリックしてビルトインサンプル(ネストされたaddress / tagsフィールドを含む)をロードできます。
JSON解析失敗と表示されます
一般的な原因:末尾に余分なカンマがある、二重引用符の代わりに単一引用符を使用している、keyに引用符が付いていない、JavaScriptコメントが含まれている。「JSONを修復」ボタンをクリックすると一部のエラーを自動修復できます;それでも失敗する場合は、まずJSONフォーマットツールで検証してください。
コンパイルエラー「std::optionalが宣言されていません」
プロジェクトがC++17以降の標準を使用していません。std::optionalはC++17で導入されました。CMakeLists.txtでCMAKE_CXX_STANDARDを17以上に設定するか(set(CMAKE_CXX_STANDARD 17))、ソースの先頭に#include <optional>を追加し、コンパイラのバージョンを確認してください。
コンパイルエラー「int64_tが宣言されていません」
ツールは<cstdint>のint64_tを使用しており、GCC 4.5+ / Clang 3.0+ / MSVC 2015+が必要です。ソースファイルの先頭に#include <cstdint>または#include <stdint.h>が含まれているか確認し、CMake C++標準設定が>= C++11であることを確認してください。
nlohmann::json逆シリアル化時にフィールドが失われます
考えられる原因:① JSONフィールド名とC++メンバー名が完全に一致していない(snake_case対camelCase);② ネストオブジェクトが正しく処理されていない;③ std::optionalフィールドのvalue()アクセスが例外をスローする。解決方法:NLOHMANN_DEFINE_TYPE_INTRUSIVEマクロを追加してフィールドマッピングを明示するか、j.value("key", default)を使用してデフォルト値を提供します。
rapidjson解析でGetStringセグメンテーションフォールト
rapidjsonはデフォルトでフィールド型を検証しません。GetStringはフィールドが存在し、文字列型である場合にのみ安全です。改善された書き方:if (doc.HasMember("name") && doc["name"].IsString()) { u.name = doc["name"].GetString(); }、存在しないkeyに対して直接GetInt / GetStringを呼び出さないようにします。
生成されるフィールド型が十分に正確ではありません(すべての整数型がint64_tです)
ツールはJSONサンプルに基づいて型を推論するため、すべての整数はint64_t、すべての文字列はstd::stringになります。int32_t、uint64_t、std::chrono::system_clock::time_pointなどのより正確な型が必要な場合は、生成後に手動でフィールド型を変更し、選択したJSON解析ライブラリがその型の逆シリアル化をサポートしていることを確認してください。
nullフィールドがstd::optional<std::string>ではなくstd::optional<nlohmann::json>を生成します
JSON nullは具体的な型を推論できないため、ツールは安全にstd::optional<nlohmann::json>にフォールバックします。フィールドの実際の型がわかっている場合は、ソースJSONにサンプル値(例えば"field": "" はstd::stringと推論されます)を指定して再生成し、手動でstd::optional<std::string>に変更できます。
snake_case JSONフィールドとC++命名スタイルが一致しません
ツールはJSONの元のフィールド名を保持してC++フィールドを生成します(例:user_name)。C++メンバーにcamelCase(userName)を使用しながらsnake_case JSONを正しく逆シリアル化したい場合は、codeExamplesの3番目のセクションを参照してNLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVEマクロを使用してください。
ダウンロードした.hppファイルがプロジェクトでコンパイルエラーになります
考えられる原因:① CMakeがC++17 / C++20標準を設定していない;② <optional> / <vector>などのヘッダーファイルが不足している;③ 構造体名がプロジェクト内の他の型と競合している。解決方法:CMakeLists.txtにset(CMAKE_CXX_STANDARD 17)を追加、ソースファイルの先頭に対応するヘッダーを追加、namespaceでラップするか競合する構造体の名前を変更します。
用語集
- struct / class
- C++で複合データ型を定義するためのキーワードです。本ツールが生成するのはstructで、例えばstruct User { int64_t id; std::string name; }です。C++ではstructとclassはほぼ同等です(デフォルトのアクセス権が異なります:structのメンバーはデフォルトでpublic、classのメンバーはデフォルトでprivate)。ツールはデフォルトでstructを生成します。逆シリアル化シナリオでは、structを使用する方が簡潔で直感的です;プライベートメンバー + アクセッサーメソッドをカプセル化する必要がある場合は、手動でclassに変更できます。
- std::string
- C++標準ライブラリの文字列型(所有権セマンティクス)で、<string>で定義されています。本ツールはJSON文字列フィールドをstd::stringに自動マップします。例えばstd::string nameです。std::stringはC言語のchar* / char[]とは異なることに注意してください:std::stringはメモリを自動管理し、演算子のオーバーロード(+、==、<)をサポートしますが、小から中程度の長さの文字列の処理で最適なパフォーマンスを発揮します;非常に長い文字列(ログの1行全体1KB+など)はstd::string_viewまたはカスタムバッファーの使用を推奨します。
- std::vector<T>
- C++標準ライブラリの動的配列コンテナ(<vector>)で、JavaのArrayList、Pythonのlist、JavaScriptのArrayに相当します。本ツールはJSON配列フィールドをstd::vector<T>に自動マップします。例えばstd::vector<std::string> tagsです。利点:連続メモリ、ランダムアクセスO(1)、末尾追加O(1)償却;欠点:中間挿入O(n)。固定サイズ配列が必要な場合はstd::array<T, N>(スタック上に割り当て)を使用できます。
- std::optional<T>
- C++17以降の標準ライブラリのオプショナル値ラッパー型(<optional>)で、値が存在しない可能性があることを示します。典型的な使用法:std::optional<std::string> nickname; if (nickname) { use(*nickname); }。本ツールはnullになる可能性のあるJSONフィールドをstd::optional<T>にマップします。例えばstd::optional<std::string> nicknameです。プロジェクトがC++11/14を使用する必要がある場合は、boost::optional<T>に置き換えることができ、APIはほぼ同じです。
- int64_t / double
- int64_tは<cstdint>の固定幅64ビット整数型のエイリアスで、long longと同等であり、クロスプラットフォームで8バイトを保証します。doubleはC++の倍精度浮動小数点型(IEEE 754倍精度 / binary64、約15-17桁の有効数字)です。本ツールはJSON整数を一律にint64_tに、浮動小数点数を一律にdoubleにマップし、クロスプラットフォームのlongサイズの不一致(Windowsのlongは32ビット、Linuxのlongは64ビット)による精度の問題を回避します。正確な浮動小数点(財務計算)が必要な場合は、long doubleまたはdecimalライブラリを使用できます。
- nlohmann::json
- C++エコシステムで最も人気のあるJSONライブラリの1つで、nlohmann/jsonとも呼ばれ、ドイツのnlohmannによってリリースされ、作者はNiels Lohmannです。そのコアアイデアは、JSONデータ構造をC++標準ライブラリ型(std::map、std::vector、std::stringなど)にマップすることであり、逆シリアル化時にj.get<T>()で1行で完了できます。本ツールで生成されるコードはnlohmann/jsonと組み合わせることができ、NLOHMANN_DEFINE_TYPE_INTRUSIVE、NLOHMANN_DEFINE_TYPE_NON_INTRUSIVEなどのマクロを使用して自動逆シリアル化を実現します。シングルヘッダー依存、ドキュメントが豊富、APIがSTLスタイルと一致しており、ほとんどのC++プロジェクトの最初の選択肢です。
- rapidjson
- Tencentがオープンソース化した高性能JSONライブラリ(C++)で、コード量は約5k行、パフォーマンスはnlohmann::jsonの約3-5倍です。SAX(ストリーミング)とDOM(ドキュメントオブジェクトモデル)の2つの解析スタイルをサポートし、SIMD命令(SSE42など)に対して特別な高速化実装があります。典型的なシナリオ:金融取引市場データプッシュ、ゲームエンジンオブジェクトシリアル化、組み込み高性能ログ。本ツールで生成されるstructはrapidjson Document / GenericValue逆シリアル化のターゲットモデルとして使用できますが、rapidjsonにはテンプレートリフレクションがないため、手動でGetObject / GetStringフィールドを抽出する必要があります。
- Web Worker / quicktype-core
- Web Workerはブラウザが提供するバックグラウンドスレッドAPIで、メインスレッドと並行して実行され、メインスレッドのDOMにアクセスできず、postMessageを介してのみ通信できます。quicktype-coreはオープンソースのJSON→多言語コードジェネレーターライブラリ(GitHub: quicktype/quicktype)で、C++/Java/TypeScript/Rust/Go/Python/Swiftなど10以上の言語をサポートしています。本ツールはquicktype-coreに基づいてブラウザローカルでC++用のheader-only構造体コードをレンダリングし、元のデータはいかなるサーバーにもアップロードされず、すべての解析、生成、ダウンロードはブラウザ内で完了します。Workerがquicktype-coreをロードすることで、UIメインスレッドのブロックを回避します。
- snake_case / camelCase / PascalCase
- 3つの主要なフィールド命名スタイル:snake_case(user_name、C / Python / DBが最初に選択)、camelCase(userName、Java / JSが最初に選択)、PascalCase(UserName、C# / Rust structフィールドが最初に選択)。本ツールはデフォルトでJSONの元のフィールド名(通常はsnake_case)を保持します。生成後に手動で調整し、NLOHMANNマクロを追加してマッピングを宣言できます。C++のパブリックフィールド命名規則ではcamelCaseまたはsnake_caseが推奨され、PascalCaseは主にクラス名に使用され(Google C++ Style)、メンバーには推奨されないことに注意してください;snake_caseはMySQL列名と自然に互換性があります。
- NLOHMANN_DEFINE_TYPE_INTRUSIVE
- nlohmann/jsonライブラリが提供するマクロで、クラス内部でJSONシリアル化フィールドマッピングを宣言するために使用されます。構文はNLOHMANN_DEFINE_TYPE_INTRUSIVE(ClassName, member1, member2, ...)で、public領域に配置する必要があります(マクロがプライベートフィールドにアクセスできるようにするため)。非侵入型バージョンのNLOHMANN_DEFINE_TYPE_NON_INTRUSIVEはクラスの外側に配置され、クラス自体を変更する必要はありません。本ツールで生成されるstructにはこのようなマクロは自動的に追加されないため、必要に応じて手動で追加してJSON keyとC++メンバーの対応関係を宣言します。JSONフィールド名とC++メンバー名が同じ場合は、このマクロを省略して直接j.get<T>()を使用できます。
JSON型からC++型へのマッピング早見表
ツールはJSON値の型に基づいて対応するC++型を自動的に推論します:
| JSON値の例 | 生成されるC++型 | 説明 |
|---|---|---|
null | std::optional<T> | null値は型が不確定なため、std::optional<T>でフォールバック(C++17+) |
true / false | bool | JSONブール値はC++ boolに直接マップ |
42 | int64_t | JSON整数はデフォルトでint64_t(<cstdint>)にマップ、long longと互換 |
3.14 | double | JSON浮動小数点数はデフォルトでdouble(IEEE 754倍精度)にマップ |
"hello" | std::string | JSON文字列はstd::string(<string>)にマップ |
["a","b"] | std::vector<std::string> | 文字列配列はstd::vector<std::string>にマップ |
[1,2,3] | std::vector<int64_t> | 整数配列はstd::vector<int64_t>にマップ |
[{...},{...}] | std::vector<Item> | オブジェクト配列は最初の要素に基づいて対応するstructを生成し、std::vectorでラップ |
[] | std::vector<nlohmann::json> | 空配列は要素型を推論できないため、nlohmann::jsonでフォールバック(std::vector<std::string>に書き換えも可) |
{...} ネストオブジェクト | 独立したstruct / class | ネストオブジェクトは独立したstructを生成、PascalCase命名(address → Address) |
よく使われるC++ JSONパーサー選択比較表
C++エコシステムの主要なJSON解析ライブラリの比較。プロジェクトのニーズに応じて選択してください:
| ライブラリ名 | APIスタイル | パフォーマンス | 適用シナリオ |
|---|---|---|---|
nlohmann::json | テンプレート / STL-like | 中 | Webバックエンド、デスクトップアプリ、教育;std::vector / std::mapとの互換性が最も高い |
rapidjson | SAX / DOM | 極めて高い | 金融取引、ゲームエンジン、高スループットサービス;SIMD高速化をサポート |
Boost.JSON | Boost.Container | 高 | Boostエコシステムプロジェクト、Webサーバー(Beast / Asio) |
cJSON | Cスタイル / 関数型 | 高 | Cプロジェクト、C++組み込み、C++テンプレートを導入したくないシナリオ |
ArduinoJson | C++テンプレート | 中 | Arduino、ESP32 / ESP8266、組み込みMCU |
よく使われるC++標準ライブラリ型とJSON対応早見表
JSONフィールドに対応するC++標準ライブラリのコア型の一覧で、開発者がすばやく参照できるようにします:
| JSONキーワード | C++標準ライブラリ対応 | 必要なヘッダーファイル | C++標準 |
|---|---|---|---|
| string | std::string | <string> | C++98 |
| integer | int64_t(<cstdint>) | <cstdint> | C++11 |
| number | double | <iostream> / <cmath> | C++98 |
| boolean | bool | <stdbool.h>(C) / 組み込み | C++98 |
| null | std::optional<T> | <optional> | C++17 |
| array | std::vector<T> | <vector> | C++98 |
| array 固定 | std::array<T, N> | <array> | C++11 |
| object / map | std::map<std::string, T> | <map> | C++98 |
| object ハッシュ | std::unordered_map<K, T> | <unordered_map> | C++11 |
| string view | std::string_view(データを所有しない) | <string_view> | C++17 |
| byte / char | std::byte / char | <cstddef> | C++17 / C++98 |
Privacy & Security
本JSONからC++ツールのすべての操作は完全にあなたのブラウザローカルで完了します:JSON解析、C++構造体生成、ファイルダウンロードはすべてブラウザJavaScript(Web Worker + quicktype-core)を介してクライアント側で実行され、ネットワークを介していかなるサーバーにもJSONコンテンツ、アップロードされたファイル、または生成されたコードを送信しません。ファイルアップロードはブラウザネイティブのFileReader APIを使用してメモリに直接読み取られ、中間サービスを経由しません。Cookieトラッキングを使用せず、ユーザー入力や使用データを収集しません。ページを閉じるか更新すると、すべての入力と出力コンテンツは自動的にメモリから消去されます。APIキー、token、機密ビジネスデータを含むJSONの処理に適しています。
Authoritative References
- nlohmannnlohmann/json GitHubリポジトリ(nlohmann/json)
- cppreferencecppreference - std::optional
- cppreferencecppreference - std::vector
- TencentRapidJSON GitHubリポジトリ(Tencent)
- BoostBoost.JSON公式ドキュメント
- ISO C++ISO C++公式標準 - isocpp.org
- JSON 圧縮
- CSV to JSON
- JSON から CSV
- JSON Diff
- JSON Escape / Unescape
- JSONフラット化
- JSON フォーマッター
- JSON 生成
- JSONPath オンラインクエリ
- JSON マージ
- JSON 修復
- JSON Schema バリデーター
- JSONソート
- JSON Stringify
- JSONをHTMLに変換
- JSONからJavaへ
- JSON から Markdown
- JSON を SQL に変換
- JSON から TOML へ変換
- JSONをTypeScriptに変換
- XML を JSON に変換
- JSONをXMLへ変換
- YAML を JSON に変換
- JSON → YAML 変換
- JSON から Go へ
- JSON から Rust
- JSON から Swift
- JSON から C#
- JSON から C++
- JSON を PHP に
- JSON から Python