C++でJSONを扱う
この記事は最終更新日から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": "ちりぬるを"
}

以上です。

参考


芽萌丸プログラミング部
芽萌丸プログラミング部@programming
プログラミング関連アカウント。Web標準技術を中心に書いていきます。フロントエンドからサーバサイドまで JavaScript だけで済ませたい人たちの集いです。記事は主に @TanakaSoftwareLab が担当。