この記事は最終更新日から1年以上が経過しています。
@programming
投稿日 2021/2/2
更新日 2021/2/2 ✏
C++でJSONを扱う
C++でJSON文字列のパース、プロパティの追加・変更・削除、そして再びJSON文字列化を行うサンプルです。
目次:
前提
- Ubuntu 16.04 LTS
- g++ 5.4.0
- C++用JSONライブラリnlohmann/jsonを利用。(必要なファイルはヘッダファイル1枚だけなのでお手軽です)
サンプルコード
nlohmann/jsonを使うことで、C++にしては比較的シンプルなJSON取り扱いコードになります。 あらかじめnlohmann/json.hppをダウンロードし、以下のサンプルコードと同じ階層に配置しておいて下さい。
json-test.cpp
#include <iostream>
#include "json.hpp"
// nlohmann/jsonを使いやすくするためエイリアス作成:
using json = nlohmann::json;
using namespace std;
int main(int argc, char* argv[]) {
// テキトーなJSON文字列を作成:
string jsonstr = R"({
"str": "いろはにほへと",
"hoge": "削除するよ!",
"num": 9999.9999,
"isFoo": false,
"person": {
"firstname": "Taro",
"surname": "YAMADA",
"favorites": ["apple", "orange"]
}
})";
// JSON文字列をパース:
auto jobj = json::parse(jsonstr);
// JSONオブジェクトからJSON文字列をダンプ:
cout << "\nJSONをダンプ: " << jobj.dump() << endl; // 整形無しで出力
// JSONオブジェクトからプロパティ値を取得:
cout << "\njobj[\"str\"]の値を取得: " << jobj["str"] << endl;
// JSONオブジェクトのプロパティ値を更新:
jobj["str"] = "ちりぬるを";
jobj.erase("hoge"); // hogeプロパティを削除
jobj["num"] = 999999.999999;
jobj["isFoo"] = true;
jobj["person"]["surname"] = "SUZUKI"; // person.surnameを変更
jobj["person"]["age"] = 20; // person.ageという新しいプロパティを追加
jobj["person"]["favorites"].push_back("banana"); // 配列に値を追加
// JSONオブジェクトからJSON文字列を整形してダンプ:
cout << "\n値変更後のJSONを整形してダンプ: " << jobj.dump(2) << endl;
}
サンプルコードのコンパイル&実行
## コンパイル&実行
$ g++ -o a.out json-test.cpp -std=c++11 && ./a.out
JSONをダンプ: {"hoge":"削除するよ!","isFoo":false,"num":9999.9999,"person":{"favorites":["apple","orange"],"firstname":"Taro","surname":"YAMADA"},"str":"いろはにほへと"}
jobj["str"]の値を取得: "いろはにほへと"
値変更後のJSONを整形してダンプ: {
"isFoo": true,
"num": 999999.999999,
"person": {
"age": 20,
"favorites": [
"apple",
"orange",
"banana"
],
"firstname": "Taro",
"surname": "SUZUKI"
},
"str": "ちりぬるを"
}
以上です。