C++ RapidJSON 清除写入的字符串

C++ RapidJSON Clear written string

我有以下 C++ 代码来生成 JSON 字符串:

StringBuffer JSONData;
PrettyWriter<StringBuffer> writer(JSONData);
writer.StartObject();
writer.String("hello");
writer.String("world");
writer.String("t");
writer.Bool(true);
writer.String("f");
writer.Bool(false);
writer.String("n");
writer.Null();
writer.String("i");
writer.Uint(123);
writer.String("pi");
writer.Double(3.1416);
writer.EndObject();

cout << JSONData.GetString() << endl;
//OUTPUTS:
{
    "hello": "world",
    "t": true,
    "f": false,
    "n": null,
    "i": 123,
    "pi": 3.1416,
}


JSONData.Clear();
writer.Reset(JSONData); //Wont compile
writer.StartObject(); //FAILS !Base::hasRoot_
writer.String("hello");
writer.String("world");
writer.String("t");
writer.Bool(true);
writer.EndObject();
cout << JSONData.GetString() << endl;

但是,我想在输出之前的 JSON 数据后创建另一个 JSON-object。然而,这 returns 我的错误 Assertion failed: !Base::hasRoot_。我该如何解决这个问题?

This linkPrettyWriter 的 RapidJSON header。您可以在第 247 行找到您遇到的错误。我不是 rapidJSON 专业人士,但我认为一位作家只为一个 object 工作,即使你清除了它。我知道这不是一个完整的答案,但我认为这无论如何都是一个提示。

此外,this link 可以为您提供有关如何使用 PrettyWriter.

的提示

您可能想使用 reset()RapidJSON documentation 可能会有所帮助。

This function reset the writer with a new stream and default settings, in order to make a Writer object reusable for output multiple JSONs.

这个文档提供了以下示例:

Writer<OutputStream> writer(os1);
writer.StartObject();
// ...
writer.EndObject();
writer.Reset(os2);
writer.StartObject();
// ...
writer.EndObject();

你可以尝试这样的事情:

StringBuffer JSONData;
PrettyWriter<StringBuffer> writer(JSONData);
writer.StartObject();
// ...
writer.EndObject();

JSONData.Clear();
writer.Reset(JSONData);
writer.StartObject();
// ...
writer.EndObject();

您甚至可以创建另一个输出流并将其解析为重置,只是为了确定..