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

问题描述 投票:0回答:1

使用

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
可以吗?

c++ json boost
1个回答
8
投票

这不是图书馆的功能。图书馆在简介中阐述了目标。它不包括用户友好的演示文稿格式。事实上,就连他们的数字格式也可以说是对用户充满敌意的。

图书馆的承诺以计算机系统之间的数据交换为中心

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.