有没有办法将 boost::json::serializer 切换为美化输出?

kab*_*aba 8 c++ json boost

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() );
}
Run Code Online (Sandbox Code Playgroud)

这(正确地)输出{"pi":3.141E0,"list":[1,0,2]},但我宁愿有:

{
  "pi":3.141E0,
  "list":
  [
    1,
    0,
    2
  ]
}
Run Code Online (Sandbox Code Playgroud)

或(“NB”版本):

{
  "pi":3.141E0,
  "list":[1,0,2]
}
Run Code Online (Sandbox Code Playgroud)

这可以boost::json不自己写吗?

seh*_*ehe 7

这不是图书馆的特色。图书馆在简介中阐述了目标。它不包括用户友好的演示文稿格式。事实上,甚至他们的数字格式也可以说是对用户怀有敌意的。

图书馆的承诺集中在计算机系统之间的数据交换

该库专注于一个常见且流行的用例:对一个名为 value 的容器进行解析和序列化,该容器保存 JSON 类型。您构建的任何值都可以序列化然后反序列化,保证结果等于原始值。无论您使用此库生成什么 JSON 输出,任何语言中最常见的 JSON 实现都可以读取。

有一个示例展示了如果您想避免大部分工作/有一个合理的起点以免忘记太多事情,如何进行简单的漂亮打印:https://www.boost.org/doc/libs/1_76_0 /libs/json/doc/html/json/examples.html

或者,您可以使用任何具有更丰富功能集的现有 JSON 库。请记住,它们会做出不同的权衡,因此您可能会遇到其他限制。