はじめに
json11を使用してJSONをC++で読み書きします。
サンプル
文字列をパースする
JSONフォーマットの文字列をパースします。
sample1.cpp
#include <iostream>
#include <fstream>
#include "json11.hpp"
int main(){
const std::string simple_test = R"({"k1": "v1", "k2": 42})"; // JSONの文字列を作成
std::string err;
auto json = json11::Json::parse(simple_test, err); // パース
std::cout << json["k1"].string_value() << std::endl; // json["<key>"]で指定
std::cout << json["k2"].int_value() << std::endl;
return 0;
}
// 出力
// v1
// 42
JSONファイルをパースする
JSONフォーマットのファイルをパースします。
data.json
{
"k1": "v1",
"k2": 33
}
sample2.cpp
#include <iostream>
#include <fstream>
#include "json11.hpp"
int main(){
std::string filepath = "data.json";
std::ifstream fileStream(filepath);
if (!fileStream.is_open()) {
std::cerr << "JFailed to open JSON file." << std::endl;
return 1;
}
std::string jsonString(
(std::istreambuf_iterator<char>(fileStream)),
std::istreambuf_iterator<char>()
);
std::string err;
auto jsonObject = json11::Json::parse(jsonString, err);
if (!err.empty()) {
std::cerr << "JSON parse error: " << err << std::endl;
return 1;
}
std::cout << jsonObject.dump() << std::endl;
std::cout << jsonObject["k1"].string_value() << std::endl;
std::cout << jsonObject["k2"].int_value() << std::endl;
return 0;
}
// 出力
// {"k1": "v1", "k2": 33}
// v1
// 33
JSONファイルを作成する
JSONファイルを作成します。
sample3.cpp
#include <iostream>
#include <fstream>
#include "json11.hpp"
int main() {
const std::string jsonString = R"({"k1": "v1", "k2": 42})";
std::string filePath = "result.json";
std::ofstream fileStream(filePath);
if (!fileStream.is_open()) {
std::cerr << "Failed to create JSON file." << std::endl;
return 1;
}
fileStream << jsonString;
fileStream.close();
return 0;
}
実行すると下記のようなファイルが生成されます。
{"k1": "v1", "k2": 42}
まとめ
json11を使用してJSONをパースしました。
コメント