プログラム 技術

C++でJsonを扱う

C++でJsonは学生時代にゲームを作成しており、その際にデータを外部ファイルに保存するのに使っていました。C++だとJsonの種類がPicjsonやJsonCppといった感じで数ある中からrapidJsonを使っています

そもそもrapidJsonとはなんぞや

rapidJsonの特徴としてはいくつかありますが特に私が気にいっている点が3つあります。ゲームを作る上で処理速度やメモリ、日本語対応は大事です

  1. rapidという名前の通り処理が速い
  2. 省メモリで使用できる
  3. UTF-8、UTF-16、UTF-32 のサポートがあり、日本語を含む JSON も問題なく扱える

rapidJsonをインストールする

Nugetから取得する

C++のプロジェクト上にある「Nugetのパッケージの管理」からrapidJsonをインストールします

対象ソリューション上で右クリックし、「NuGetパッケージの管理(N)...」をクリック
検索窓で「rapidjson」と入力し、一番上にある「rapidjson」をインストールする

追加の依存インクルードに追加する

インストールしただけでは使えないので、使えるように設定に追加します

対象ソリューション上で右クリックし、「プロパティ(R)」をクリックする
左側の構成プロパティから「C/C++」を選択し、一番上にある「追加のインクールドディレクトリ」の左側の下矢印をクリックし、「編集」を選択する
「$(SolutionDir)packages\rapidjson.1.0.2\build\native\include\rapidjson」を追加する
「追加のインクルードディレクトリ」に先ほど設定した値が設定されていることが確認できたら「OK」を押す
1.0.2のところはインストールされているrapidJsonのバージョンによって変更する

実際にrapidJsonを呼び出してみる

これでrapidJsonを呼び出すことができるようになったので、実際に使ってみます

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

const char* json = "{\"project\":\"rapidjson\",\"stars\":10, \"名前\":\"テスト太郎\"}";
rapidjson::Document d;
d.Parse(json);

// starsの値に+1する
rapidjson::Value& s = d["stars"];
s.SetInt(s.GetInt() + 1);

// 文字列化する
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
d.Accept(writer);

// 内容を出力する
// {"project":"rapidjson","stars":11,"名前":"テスト太郎"} と出力される
std::cout << buffer.GetString() << std::endl; 

-プログラム, 技術
-