jwm*_*jwm 4 c++ tostring jsoncpp
我有一个要序列化的jsoncpp值。最直接的方法是这样的:
Json::Value val; // population is left as an exercise for the reader
std::string str = Json::FastWriter().write(val);
Run Code Online (Sandbox Code Playgroud)
问题是它FastWriter已被弃用,我不能容忍编译器警告。根据不太直观的文档,我应该StreamWriterBuilder改用:
Json::StreamWriterBuilder builder;
builder["commentStyle"] = "None";
builder["indentation"] = "";
std::unique_ptr<Json::StreamWriter> writer( builder.newStreamWriter() );
std::ostringstream os;
writer->write(val, &os);
std::string str = os.str();
Run Code Online (Sandbox Code Playgroud)
这肯定不能“更好”吗?我假设错误在于我,并且有一种简单的方法来执行最小序列化(没有多余的空格)。
这显示了一个稍微更紧凑的形式(尽管它似乎只是将上面的内容包装在一个函数调用中)。
Json::StreamWriterBuilder builder;
builder["indentation"] = ""; // assume default for comments is None
std::string str = Json::writeString(builder, val);
Run Code Online (Sandbox Code Playgroud)
现在是正确的方法吗?
你这样做是正确的。
第二个例子只是第一个例子的简写——在这两种情况下,构建器动态分配一个写入器,使用写入器,然后释放写入器。
为什么旧的FastWriter实现被弃用我不能说。我个人有点想念它。但是工厂更灵活,允许将不同的实现插入到同一组功能中。您必须询问 JsonCpp 开发人员这是否是他们决定的核心。
如果您总是想使用相同的设置(例如您的["indentation"] = "")进行写入,您可以提供Json::Value代表设置的Json::StreamWriterBuilder::setDefault,然后写入字符串不需要Json::StreamWriterBuilder再次命名(但默认会构造一个)
启动
Json::Value streamWriterSettings{R"({ "indentation" : "" })"};
Json::StreamWriterBuilder::setDefault(&streamWriterSettings);
Run Code Online (Sandbox Code Playgroud)
用法
std::string str = Json::writeString({}, val);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3425 次 |
| 最近记录: |