JSONCPP有一个编写器,但它似乎只是从解析器获取信息,然后将其输出到字符串或流中。如何更改或创建新对象,数组,值,字符串等并将其写入文件?
答案 0 :(得分:43)
#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"
}
}
}
答案 1 :(得分:10)
#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();
}
答案 2 :(得分:9)
AFAICT,你创建了Json :: Value类型的对象,它满足所有JSON数据类型,并将结果传递给Json :: Writer(它的一个派生类型,具体而言),或者只是为了一条小溪。
例如:将三个整数的数组写入文件:
Json::Value vec(Json::arrayValue);
vec.append(Json::Value(1));
vec.append(Json::Value(2));
vec.append(Json::Value(3));
std::cout << vec;
答案 3 :(得分:3)
首先,您必须创建所需的JSON::Value
。您应该查看所有构造函数(first)。要创建必要的层次结构,请参阅append
和operator []重载;对象的数组indices和string keys都有重载。
将JSON值写回的一种方法是使用 StyledStreamWriter::write
和ofstream
。
请参阅cegprakash的答案,了解如何编写它。
答案 4 :(得分:1)
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"
}