nlohmann/json入門: Modern C++のためのJSON
Emily Parker
Product Engineer · Leapcell

Key Takeaways
nlohmann/json
は、JSONの簡単な処理のためのヘッダーのみのC++ライブラリです。- STLおよび最新のC++機能と自然に統合されています。
- カスタム型のシリアライズは、
to_json
とfrom_json
を介してサポートされます。
nlohmann/json
ライブラリは、「JSON for Modern C++」とも呼ばれ、JSONデータをC++で扱うのを簡単にする、人気のあるオープンソースのヘッダーのみのライブラリです。直感的な構文を提供し、C++の標準テンプレートライブラリ(STL)とシームレスに統合されており、開発者にとってJSONの解析とシリアライズが簡単になります。
主な機能
- ヘッダーのみのライブラリ: 個別のコンパイルは不要です。ヘッダーファイルをプロジェクトに含めるだけです。
- モダンC++との統合: 初期化子リスト、型推論、範囲ベースのループなど、C++11の機能を利用します。
- STLの互換性:
std::vector
、std::map
、std::unordered_map
などのSTLコンテナとシームレスに連携します。 - シリアライズのサポート: JSONとカスタムC++型の間で簡単に変換できます。
- 包括的なドキュメント: 開発者を支援するために、豊富な例とAPIリファレンスが用意されています。
はじめに
インストール
nlohmann/json
はヘッダーのみのライブラリであるため、インストールは簡単です。
- ヘッダーをダウンロード: 公式GitHubリポジトリから
json.hpp
ファイルを取得します。 - プロジェクトに含める:
json.hpp
をプロジェクトのインクルードパスに配置します。 - コードに含める: C++ソースファイルで、ヘッダーを含めます。
#include <nlohmann/json.hpp> using json = nlohmann::json;
基本的な使い方
JSONオブジェクトの作成
初期化子リストを使用してJSONオブジェクトを作成できます。
json j = { {"name", "John Doe"}, {"age", 30}, {"is_student", false}, {"skills", {"C++", "Python", "JavaScript"}} };
JSON文字列の解析
JSON文字列を解析するには:
std::string json_str = R"({"name": "Jane Doe", "age": 25})"; json j = json::parse(json_str);
値へのアクセスと変更
[]
または.at()
を使用して要素にアクセスします。
std::string name = j["name"]; int age = j.at("age");
値を同様に変更します。
j["age"] = 26;
シリアライズ
JSONオブジェクトを文字列に変換します。
std::string serialized = j.dump(); // コンパクトな表現 std::string pretty = j.dump(4); // 4スペースのインデントで美しく表示
高度な機能
ファイルの操作
ファイルからの読み込み:
std::ifstream input_file("data.json"); json j; input_file >> j;
ファイルへの書き込み:
std::ofstream output_file("output.json"); output_file << j.dump(4);
カスタム型のシリアライズ
カスタムC++型をシリアライズおよびデシリアライズするには、to_json
およびfrom_json
関数を定義します。
struct Person { std::string name; int age; }; void to_json(json& j, const Person& p) { j = json{{"name", p.name}, {"age", p.age}}; } void from_json(const json& j, Person& p) { j.at("name").get_to(p.name); j.at("age").get_to(p.age); }
これで、Person
オブジェクトをシリアライズおよびデシリアライズできます。
Person person = {"Alice", 28}; json j = person; Person new_person = j.get<Person>();
エラー処理
例外を使用して解析エラーを処理します。
try { json j = json::parse(invalid_json_str); } catch (json::parse_error& e) { std::cerr << "Parse error: " << e.what() << std::endl; }
結論
nlohmann/json
ライブラリは、C++でJSONを処理するためのモダンで直感的なアプローチを提供します。C++の機能とSTLコンテナとのシームレスな統合により、JSONデータを扱う開発者にとって貴重なツールとなっています。設定ファイルの読み込み、Web APIとのやり取り、構造化データの保存など、nlohmann/json
はプロセスを簡素化し、コードの可読性を高めます。
FAQs
はい、最新の機能を使用しているため、C++11以降が必要です。
はい、標準ファイルストリームを使用してJSONをjson
オブジェクトに読み込むことができます。
型に対してto_json
およびfrom_json
関数を定義します。
Leapcellは、バックエンドプロジェクトをホストするための最良の選択肢です。
Leapcellは、Webホスティング、非同期タスク、およびRedisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ料金が発生します - リクエストも請求もありません。
圧倒的な費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
容易なスケーラビリティと高性能
- 容易に高い同時実行を処理するための自動スケーリング。
- 運用オーバーヘッドゼロ—構築に集中するだけです。
詳細については、ドキュメントをご覧ください!
Xでフォローしてください: @LeapcellHQ