JSONフォーマットをパースする C++

はじめに

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をパースしました。

コメント

タイトルとURLをコピーしました