使用 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 树中创建额外的级别。