我有以下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对象。但是,这将返回错误Assertion failed: !Base::hasRoot_
。我怎么才能解决这个问题?
发布于 2017-05-12 08:21:42
这个链接是PrettyWriter
的RapidJSON头。您可以在第247行找到您遇到的错误。我不是rapidJSON专业人士,但我认为一个作家只为一个对象工作,即使你清除了它。我知道这不是一个完整的答案,但我认为这将是一个提示。
此外,这链接可以为您提供如何使用PrettyWriter
的提示。
您可能想使用reset()
,RapidJSON文档可以提供帮助。
此函数使用新的流和默认设置重置写入器,以使writer对象可用于输出多个JSON。
该文档提供了以下示例:
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();
您甚至可以创建另一个输出流并将其解析为重置,只是为了确定..。
https://stackoverflow.com/questions/43932581
复制相似问题