JSONCPPにはライターがありますが、パーサーから情報を取得し、それを文字列またはストリームに出力するだけです。新しいオブジェクト、配列、値、文字列などを変更または作成し、それらをファイルに書き込むにはどうすればよいですか?
#include<json/writer.h>
コード:
Json::Value event;
Json::Value vec(Json::arrayValue);
vec.append(Json::Value(1));
vec.append(Json::Value(2));
vec.append(Json::Value(3));
event["competitors"]["home"]["name"] = "Liverpool";
event["competitors"]["away"]["code"] = 89223;
event["competitors"]["away"]["name"] = "Aston Villa";
event["competitors"]["away"]["code"]=vec;
std::cout << event << std::endl;
出力:
{
"competitors" :
{
"away" :
{
"code" : [ 1, 2, 3 ],
"name" : "Aston Villa"
},
"home" :
{
"name" : "Liverpool"
}
}
}
#include <json.h>
#include <iostream>
#include <fstream>
void main()
{
std::ofstream file_id;
op_file_id.open("file.txt");
Json::Value value_obj;
//populate 'value_obj' with the objects, arrays etc.
Json::StyledWriter styledWriter;
file_id << styledWriter.write(value_obj);
file_id.close();
}
AFAICTでは、すべてのJSONデータ型に対応するJson :: Value型のオブジェクトを作成し、結果をJson :: Writer(その派生型の1つ、具体的には)または単純にストリームに渡します。
例:3つの整数の配列をファイルに書き込むには:
Json::Value vec(Json::arrayValue);
vec.append(Json::Value(1));
vec.append(Json::Value(2));
vec.append(Json::Value(3));
std::cout << vec;
まず、必要な JSON::Value
。すべてのコンストラクター( first )を確認する必要があります。必要な階層を作成するには、 append
およびoperator []オーバーロードを参照してください。オブジェクトには、配列 indices と string keys の両方にオーバーロードがあります。
JSON値を書き戻す1つの方法は StyledStreamWriter::write
および ofstream
。
書き方はcegprakashの答えを見てください。
Json::StyledWriter
は非推奨です。Json::StreamWriterBuilder
を使用して、jsonをファイルに書き込むことができます。
Json::Value rootJsonValue;
rootJsonValue["foo"] = "bar";
Json::StreamWriterBuilder builder;
builder["commentStyle"] = "None";
builder["indentation"] = " ";
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
std::ofstream outputFileStream("/tmp/test.json");
writer -> write(rootJsonValue, &outputFileStream);
Jsonは/tmp/test.json
に書き込まれます。
$ cat /tmp/test.json
{
"foo" : "bar"
}