使用 rapidjson 写入文件的数组数组
arrays of arrays writing to a file using rapidjson
使用下面的函数我将向量的向量写入一个文件并得到这个:
[[[1, 2, 3],[1, 2, 3],[1, 2, 3],[1, 2, 3]]]
但是我希望输出看起来像这样:
[[1, 2, 3],[1, 2, 3],[1, 2, 3],[1, 2, 3]]
代码:
void resultToJson(std::vector<std::vector<int>> &result, const char *fileName) {
rapidjson::Document d;
rapidjson::Document::AllocatorType &allocator = d.GetAllocator();
rapidjson::Value globalArray(rapidjson::kArrayType);
std::vector<std::vector<int>>::iterator row;
for (row = result.begin(); row != result.end(); row++) {
std::vector<int>::iterator col;
rapidjson::Value myArray(rapidjson::kArrayType);
for (col = row->begin(); col != row->end(); col++) {
myArray.PushBack(*col, allocator);
}
globalArray.PushBack(myArray, allocator);
}
d.SetArray().PushBack(globalArray, allocator);
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
d.Accept(writer);
std::ofstream of(fileName);
of << buffer.GetString();
if (!of.good())
throw std::runtime_error("Can't write the JSON string to the file!");
}
我找不到执行此操作的方法。任何帮助将不胜感激。
您有 globalArray
个要推送的单个元素。不需要。
消除它并使用 d.SetArray().PushBack(myArray, allocator);
代替应该工作得很好,并且避免在 JSON 树中创建额外的级别。
使用下面的函数我将向量的向量写入一个文件并得到这个:
[[[1, 2, 3],[1, 2, 3],[1, 2, 3],[1, 2, 3]]]
但是我希望输出看起来像这样:
[[1, 2, 3],[1, 2, 3],[1, 2, 3],[1, 2, 3]]
代码:
void resultToJson(std::vector<std::vector<int>> &result, const char *fileName) {
rapidjson::Document d;
rapidjson::Document::AllocatorType &allocator = d.GetAllocator();
rapidjson::Value globalArray(rapidjson::kArrayType);
std::vector<std::vector<int>>::iterator row;
for (row = result.begin(); row != result.end(); row++) {
std::vector<int>::iterator col;
rapidjson::Value myArray(rapidjson::kArrayType);
for (col = row->begin(); col != row->end(); col++) {
myArray.PushBack(*col, allocator);
}
globalArray.PushBack(myArray, allocator);
}
d.SetArray().PushBack(globalArray, allocator);
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
d.Accept(writer);
std::ofstream of(fileName);
of << buffer.GetString();
if (!of.good())
throw std::runtime_error("Can't write the JSON string to the file!");
}
我找不到执行此操作的方法。任何帮助将不胜感激。
您有 globalArray
个要推送的单个元素。不需要。
消除它并使用 d.SetArray().PushBack(myArray, allocator);
代替应该工作得很好,并且避免在 JSON 树中创建额外的级别。