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 link 是 PrettyWriter
的 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();
您甚至可以创建另一个输出流并将其解析为重置,只是为了确定..
我有以下 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 link 是 PrettyWriter
的 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();
您甚至可以创建另一个输出流并将其解析为重置,只是为了确定..