使用
boost::json::serializer
(如文档 - 快速查看中的示例所示)以紧凑格式保存 json 树。
有没有办法指示
serializer
输出人类可读的文件(即带有换行符和空格)?我四处寻找,但没有找到任何提示。
注意:更好的是以紧凑的格式编写树的较高级别,以及一些对象或数组(可能是标记的)。
缩短的示例代码可能如下所示:
#include <iostream>
#include <boost/json.hpp>
#include <boost/json/src.hpp> // use header-only
using namespace boost;
int main(int /*argc*/, char */*argv*/[]) {
json::value jv = {
{ "pi", 3.141 },
{"list", {1, 0, 2}},
};
json::serializer sr;
sr.reset( &jv );
do {
char buf[ 16 ];
std::cout << sr.read( buf );
} while( ! sr.done() );
}
这(正确地)输出
{"pi":3.141E0,"list":[1,0,2]}
,但我宁愿有:
{
"pi":3.141E0,
"list":
[
1,
0,
2
]
}
或(“NB”版本):
{
"pi":3.141E0,
"list":[1,0,2]
}
不用自己写,用
boost::json
可以吗?
这不是图书馆的功能。图书馆在简介中阐述了目标。它不包括用户友好的演示文稿格式。事实上,就连他们的数字格式也可以说是对用户充满敌意的。
图书馆的承诺以计算机系统之间的数据交换为中心:
这个库专注于一个常见且流行的用例:解析和序列化到一个名为 value 的容器,该容器保存 JSON 类型。您构建的任何值都可以序列化然后反序列化,保证结果等于原始值。无论您使用此库生成什么 JSON 输出,任何语言中最常见的 JSON 实现都可以读取。
有一个示例展示了如何进行简单的漂亮打印,如果您想避免大部分工作/有一个合理的起点以免忘记太多事情:https://www.boost.org/doc/libs /1_76_0/libs/json/doc/html/json/examples.html
或者,您可以使用任何具有更丰富功能集的现有 JSON 库。请记住,他们会做出不同的权衡,因此您可能会遇到其他限制。