MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C++の応用 - JSONのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C++の応用 - JSON
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == JSON for Modern C++ == ==== JSON for Modern C++の概要 ==== 世の中には無数のJSONライブラリがあり、それぞれに存在理由がある。<br> JSON for Modern C++では、次のような設計目標がある。<br> * 直感的な構文 *: Python等のプログラム言語では、JSONはファーストクラスのデータ型のように見える。 *: C++の演算子の全て使用して、コード内で同じ感覚を実現している。 *: <br> * 統合の簡素化 *: ソースコード全体は、単一のヘッダファイルであるjson.hppファイルで構成されているのみである。 *: ライブラリ、サブプロジェクト、依存関係、複雑なビルドシステムは不要である。 *: JSON for Modern C++は、C++ 11で記述されており、コンパイラフラグやプロジェクト設定を調整する必要は無い。 *: <br> * 高い品質 *: JSON for Modern C++は十分にテストされており、全ての例外的な動作を含むソースコードを100%カバーしている。 *: また、ValgrindとClang Sanitizersでメモリリークが無いことを確認している。 *: さらに、Google OSS-Fuzzは、全てのパーサーに対してファズテストを24時間年中無休で実行し、これまでに数十億のテストを効果的に実行している。 *: 高品質を維持するために、プロジェクトはコアインフラストラクチャイニシアチブ (CII)のベストプラクティスに従っている。 *: <br> * メモリ効率 *: 各JSON オブジェクトには、1つのポインタ (共用体の最大サイズ)と1つの列挙要素 (1バイト)のオーバーヘッドがある。 *: デフォルトの汎化では、次のC++データ型が使用される。 *: 文字列の場合は<code>std::string</code> *: 数値の場合は<code>int64_t、uint64_t、double</code> *: オブジェクトの場合は<code>std::map</code> *: 配列の場合は<code>std::vector</code> *: ブール値の場合は<code>bool</code> *: また、必要に応じて汎用クラスのBasic_jsonをテンプレート化することができる。 *: <br> * 開発効率 *: より高速なJSONライブラリは存在するが、単一ヘッダファイルでJSONサポートを追加することにより、開発を高速化することができる。 *: <code>std::vector</code>クラスや<code>std::map</code>クラスの使用方法を知っていれば、すぐに使用することができる。 <br> <u>JSON for Modern C++は、[[その他_-_ソフトウェアライセンス#MIT_License|MITライセンス]]である。</u><br> <br> ==== JSON for Modern C++のインストール ==== ===== Linux ===== [https://github.com/nlohmann/json JSON for Modern C++のGithub]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードするファイルは、Source code (tar.gz)と記載されているリンクである。<br> <br> ダウンロードしたファイルを解凍する。<br> tar xf json-<バージョン>.tar.xz cd json-<バージョン> <br> JSON for Modern C++をビルドおよびインストールする。<br> mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=<JSON for Modern C++のインストールディレクトリ> .. make -j $(nproc) make install <br> ===== Windows ===== [https://github.com/nlohmann/json JSON for Modern C++のGithub]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードするファイルは、<u>include.zip</u>または<u>json.hpp</u>と記載されているリンクである。<br> <br> ダウンロードしたファイルを解凍する。<br> 各プロジェクトファイルに配置して、json.hppをインクルードして使用する。<br> <br> ==== JSONファイルの読み込み ==== <syntaxhighlight lang="c++"> #include <iostream> #include <fstream> #include "nlohmann/json.hpp" // JSONファイルの読み込み string filename = "JSON-Sample.json"; ifstream ifs(filename.c_str()); if (ifs.good()) { json m_json; ifs >> m_json // 読み込んだデータを各変数へ代入 string firstname = m_json["FirstName"]; string lastname = m_json["LastName"]; int age = m_json["Age"]; double height = m_json["Height"]; // 各データの表示 cout << "firstname:" << firstname << endl; cout << "lastname:" << lastname << endl; cout << "age:" << age << endl; cout << "height:" << height << endl; } else { // JSONファイルの読み込みに失敗した場合 cout << "ファイルの読み込みに失敗しました" << endl; } </syntaxhighlight> <br> ==== JSONファイルの書き込み ==== <syntaxhighlight lang="c++"> #include <iostream> #include <fstream> #include "nlohmann/json.hpp" // 書き込むJSONファイルの内容 json m_json = { {"FirstName", "Jung kook"}, {"LastName", "Park"}, {"Country", "Korea"}, {"Age", 25}, {"Height" 180.5f} }; // JSONファイルのパス string filename = "JSON-Sample.json"; // JSONファイルへ書き込み ofstream writing_file; writing_file.open(filename, ios::out); // JSONファイルの作成またはオープン writing_file << m_json.dump() << endl; // JSON型のオブジェクトを書き込むには、シリアライズを行う必要がある writing_file.close(); // JSONファイルを閉じる </syntaxhighlight> <br> ==== JSONファイルの編集 ==== 以下の例では、"Age"キーの値を30に変更、"Height"キーと値を削除している。<br> <br> <syntaxhighlight lang="json"> # 編集前のJSONデータ (JSON-Sample.jsonファイル) { "FirstName": "Jung kook", "LastName": "Park", "Country": "Korea", "Age": 25, "Height": 180.5 } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> #include <iostream> #include <fstream> #include "nlohmann/json.hpp" using json = nlohmann::json; using namespace std; // JSONファイルの読み込み string filename = "JSON-Sample.json"; ifstream ifs(filename.c_str()); if (ifs.good()) { json m_json; ifs >> m_json; // ファイルを閉じる ifs.close(); // Ageを30に変更 m_json["Age"] = 30; // Heightを削除 m_json.erase("Height"); // 変更したJSONをファイルに書き込み ofstream writing_file; writing_file.open(filename, ios::out); writing_file << m_json.dump() << endl; writing_file.close(); } else { // JSONファイルの読み込みに失敗した場合 cout << "ファイルの読み込みに失敗しました" << endl; } </syntaxhighlight> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:C++]]
C++の応用 - JSON
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse