首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ RapidJSON清写字符串

C++ RapidJSON清写字符串
EN

Stack Overflow用户
提问于 2017-05-12 08:05:53
回答 1查看 3K关注 0票数 2

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

代码语言:javascript
运行
复制
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_。我怎么才能解决这个问题?

EN

Stack Overflow用户

回答已采纳

发布于 2017-05-12 08:21:42

这个链接PrettyWriter的RapidJSON头。您可以在第247行找到您遇到的错误。我不是rapidJSON专业人士,但我认为一个作家只为一个对象工作,即使你清除了它。我知道这不是一个完整的答案,但我认为这将是一个提示。

此外,链接可以为您提供如何使用PrettyWriter的提示。

您可能想使用reset()RapidJSON文档可以提供帮助。

此函数使用新的流和默认设置重置写入器,以使writer对象可用于输出多个JSON。

该文档提供了以下示例:

代码语言:javascript
运行
复制
Writer<OutputStream> writer(os1);
writer.StartObject();
// ...
writer.EndObject();
writer.Reset(os2);
writer.StartObject();
// ...
writer.EndObject();

你可以试试这样的方法:

代码语言:javascript
运行
复制
StringBuffer JSONData;
PrettyWriter<StringBuffer> writer(JSONData);
writer.StartObject();
// ...
writer.EndObject();

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

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

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43932581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档