JSON から C++
内容はまだありません
無料オンラインJSONからC++ツール。JSONを貼り付けると、コンパイル可能なC++ struct / classヘッダーファイルコードが自動生成されます。nlohmann/jsonまたはrapidjsonでAPIレスポンスを逆シリアル化するのに適しており、ネストオブジェクトは独立したクラスに自動分割され、std::vectorとstd::optionalは自動的に処理されます。純ブラウザローカル実行。
内容はまだありません
無料オンラインJSONからC++ツール。JSONを貼り付けると、コンパイル可能なC++ struct / classヘッダーファイルコードが自動生成されます。nlohmann/jsonまたはrapidjsonでAPIレスポンスを逆シリアル化するのに適しており、ネストオブジェクトは独立したクラスに自動分割され、std::vectorとstd::optionalは自動的に処理されます。純ブラウザローカル実行。
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++構造体に直接コンパイルするためのショートカットエントリです。
生成された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を直接ダウンロード
*/rapidjsonはカスタム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命令を使用して高速化できます。
*/JSONフィールドが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形式を処理できます。
*/ほとんどのチームは最初にnlohmann::jsonを使用することを推奨します。理由はAPIがSTLに似ており、逆シリアル化時にj.get<User>()の1行で完了でき、可読性が非常に高いからです。毎秒百万レベルのJSONフィールド抽出などのパフォーマンスボトルネックに遭遇した場合にのみrapidjsonに切り替えてください。本ツールで生成される構造体は両方と組み合わせることができます。
nlohmann/jsonリポジトリrapidjsonリポジトリinclude(FetchContent) + FetchContent_Declare(nlohmann_json URL ...)を使用するのが、CMakerがnlohmann/jsonを統合する最もクリーンな方法であり、vcpkgをプリインストールする必要はありません;FetchContentを構成したくない場合は、vcpkg install nlohmann-jsonを使用するか、json.hppシングルファイルを直接ダウンロードしてインクルードできます。
CMake FetchContent公式ドキュメントツールはデフォルトでJSONの元のフィールド名(snake_case)を保持します。C++メンバーをcamelCaseまたはPascalCaseにしたい場合は、クラス内部にNLOHMANN_DEFINE_TYPE_INTRUSIVE(UserProfile, id, userName, ...)を追加してJSON keyとC++メンバーを明示的にマップする必要があります。そうしないと逆シリアル化が失敗します。
NLOHMANN_DEFINE_TYPE_INTRUSIVEドキュメント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::optionalArduino Uno / ESP8266などのRAMが非常に小さいデバイスでは、std::vectorとstd::stringは通常OOMをトリガーします。代わりにArduinoJson 6.x + StaticJsonDocument<容量>でバッファーを制限し、std::vector<T>を固定サイズstd::array<T, N>に、std::stringをconst char* + 長さに置き換えてください。
ArduinoJsonドキュメント本ツールのすべての解析、コード生成、ファイルダウンロードはブラウザローカルでWeb Workerを介して完了し、元のJSONはいかなるサーバーにもアップロードされません。ただし、依然として推奨します:① 内部ビジネスモデルは最初にデータマスキングを行う(token / 携帯電話番号などを削除);② ページを閉じるとメモリから消去される;③ 大企業のコンプライアンスシナリオでは、顧客情報を含むJSONはIDE内でローカルquicktypeコマンドラインを使用して処理することを推奨します。
6レベルを超えるネストJSONはソース側でリファクタリングするか、本ツールで生成後に手動で深いネストを中間構造体に分割して可読性とコンパイル速度を向上させることを推奨します。深いネストはテンプレートのインスタンス化深度が深すぎる原因となり、一部の古いコンパイラ(GCC 6以下)は「template instantiation depth exceeded」エラーを報告します。
本ツールで生成されるコードは本質的に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コンテンツを貼り付けます(ドラッグアンドドロップまたはクリックして.json / .txtファイルをアップロードすることもサポートされています)。ツールは400ms以内にquicktype-coreを呼び出してブラウザローカルでC++ヘッダーファイルコードを自動生成します;右側のCodeMirror領域にstd::string / std::vector<T> / ネストclassを含む構造体コードが表示されます。JSON形式にエラーがある場合は、「JSONを修復」ボタンをクリックして自動修復してから変換してください。
ツールが出力するのは、C++標準ライブラリ(<string>、<vector>、<optional>、<cstdint>)のみに依存するheader-only構造体コードです。nlohmann/jsonで解析する場合は、追加で#include <nlohmann/json.hpp>が必要です;rapidjsonで解析する場合は、#include "rapidjson/document.h"が必要です。その他の標準ヘッダーファイルはツールが必要に応じて宣言します。
すべての有効なJSON構造をサポートしています:基本型(null、boolean、number、string)、配列(1次元または多次元)、ネストオブジェクト(任意の深さ)。JSONオブジェクトはルートstruct / classを生成し、JSON配列は上位構造体のフィールドにstd::vector<T>形式で表示されます。JavaScriptオブジェクトリテラル、関数、Symbol、undefinedなどの非JSON値はサポートしていません。
文字列はstd::stringにマップされ;整数はint64_t(古いコードとの互換性のためにlong longも一般的に使用されます)にマップされ;浮動小数点数はdoubleにマップされ;ブール値はboolにマップされ;配列はstd::vector<T>にマップされ;ネストオブジェクトは独立したstruct / classにマップされ;null値はstd::optional<T>にマップされます(nlohmann::jsonでフォールバックできます)。詳細なマッピングルールについては、ページ下部の「JSON型からC++型へのマッピング早見表」を参照してください。
JSONのnull値はstd::optional<T>(C++17以降で使用可能)を生成し、フィールドが欠落しているか型が不確定である可能性があることを示します。フィールドの実際の型が既にわかっている場合は、ソースJSONにサンプル値(例えば"field": "" はstd::stringと推論されます)を指定し、生成後にビジネスニーズに応じてstd::optional<std::string>などのより正確な型に変更できます。
はい。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 j; j["root"] = nlohmann::json::parse(raw_json); User u = j.get<User>(); 前提条件として、プロジェクトにnlohmann/jsonシングルヘッダー依存関係が導入されている(<nlohmann/json.hpp>を直接インクルード)こと、および本ツールで生成されたUser構造体が定義されていることが必要です。
はい。rapidjsonでは、GetObjectタイプのフィールド抽出コードを手動で記述する必要があります。典型的なパス:rapidjson::Document doc; doc.Parse(raw_json); const auto& obj = doc["root"]; std::string id = obj["id"].GetString(); rapidjsonはテンプレートによる自動逆シリアル化をサポートしていないため、生成されるstructはデータモデルの参照としてのみ機能します。
ツールはJSONの元のフィールド名を保持してC++フィールドを生成します(例:user_name)。C++メンバーにcamelCase(userName)またはPascalCase(UserName)を使用したい場合は、生成後に手動で変更し、JSNOMacros(NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_JSON_FROM / NLOHMANN_JSON_TO)を追加してマッピングを指定できます。
はい。本ツールが生成するのは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を修復」ボタンを提供します。クリックすると一般的なエラーを自動修復できます:末尾の余分なカンマ、単一引用符から二重引用符への置換、引用符が欠落しているkeyの引用符補完、コメントの削除など。修復が成功するとC++コードの生成が続行されます。
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 / .txtファイルを選択するか、サンプルボタンをクリックしてビルトインサンプル(ネストされたaddress / tagsフィールドを含む)をロードできます。
一般的な原因:末尾に余分なカンマがある、二重引用符の代わりに単一引用符を使用している、keyに引用符が付いていない、JavaScriptコメントが含まれている。「JSONを修復」ボタンをクリックすると一部のエラーを自動修復できます;それでも失敗する場合は、まずJSONフォーマットツールで検証してください。
プロジェクトがC++17以降の標準を使用していません。std::optionalはC++17で導入されました。CMakeLists.txtでCMAKE_CXX_STANDARDを17以上に設定するか(set(CMAKE_CXX_STANDARD 17))、ソースの先頭に#include <optional>を追加し、コンパイラのバージョンを確認してください。
ツールは<cstdint>のint64_tを使用しており、GCC 4.5+ / Clang 3.0+ / MSVC 2015+が必要です。ソースファイルの先頭に#include <cstdint>または#include <stdint.h>が含まれているか確認し、CMake C++標準設定が>= C++11であることを確認してください。
考えられる原因:① JSONフィールド名とC++メンバー名が完全に一致していない(snake_case対camelCase);② ネストオブジェクトが正しく処理されていない;③ std::optionalフィールドのvalue()アクセスが例外をスローする。解決方法:NLOHMANN_DEFINE_TYPE_INTRUSIVEマクロを追加してフィールドマッピングを明示するか、j.value("key", default)を使用してデフォルト値を提供します。
rapidjsonはデフォルトでフィールド型を検証しません。GetStringはフィールドが存在し、文字列型である場合にのみ安全です。改善された書き方:if (doc.HasMember("name") && doc["name"].IsString()) { u.name = doc["name"].GetString(); }、存在しないkeyに対して直接GetInt / GetStringを呼び出さないようにします。
ツールはJSONサンプルに基づいて型を推論するため、すべての整数はint64_t、すべての文字列はstd::stringになります。int32_t、uint64_t、std::chrono::system_clock::time_pointなどのより正確な型が必要な場合は、生成後に手動でフィールド型を変更し、選択したJSON解析ライブラリがその型の逆シリアル化をサポートしていることを確認してください。
JSON nullは具体的な型を推論できないため、ツールは安全にstd::optional<nlohmann::json>にフォールバックします。フィールドの実際の型がわかっている場合は、ソースJSONにサンプル値(例えば"field": "" はstd::stringと推論されます)を指定して再生成し、手動でstd::optional<std::string>に変更できます。
ツールはJSONの元のフィールド名を保持してC++フィールドを生成します(例:user_name)。C++メンバーにcamelCase(userName)を使用しながらsnake_case JSONを正しく逆シリアル化したい場合は、codeExamplesの3番目のセクションを参照してNLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVEマクロを使用してください。
考えられる原因:① CMakeがC++17 / C++20標準を設定していない;② <optional> / <vector>などのヘッダーファイルが不足している;③ 構造体名がプロジェクト内の他の型と競合している。解決方法:CMakeLists.txtにset(CMAKE_CXX_STANDARD 17)を追加、ソースファイルの先頭に対応するヘッダーを追加、namespaceでラップするか競合する構造体の名前を変更します。
ツールは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解析ライブラリの比較。プロジェクトのニーズに応じて選択してください:
| ライブラリ名 | 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 |
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 |
本JSONからC++ツールのすべての操作は完全にあなたのブラウザローカルで完了します:JSON解析、C++構造体生成、ファイルダウンロードはすべてブラウザJavaScript(Web Worker + quicktype-core)を介してクライアント側で実行され、ネットワークを介していかなるサーバーにもJSONコンテンツ、アップロードされたファイル、または生成されたコードを送信しません。ファイルアップロードはブラウザネイティブのFileReader APIを使用してメモリに直接読み取られ、中間サービスを経由しません。Cookieトラッキングを使用せず、ユーザー入力や使用データを収集しません。ページを閉じるか更新すると、すべての入力と出力コンテンツは自動的にメモリから消去されます。APIキー、token、機密ビジネスデータを含むJSONの処理に適しています。