Boost JSON 序列化格式(Boost 1.76.0)

che*_*ver 7 c++ json boost

如何控制boost json库中的序列化格式。我正在尝试序列化该对象,并且浮点数以科学计数法输出。如何以固定符号输出,如 12000000 而不是 1.2E7?和 0 而不是 0E0。

IE

{"id":"de69041b-141b-4e01-b349-458f26f08259","price":3.343403E12,"qty":1.2E7}
{"id":"de69041b-141b-4e01-b349-458f26f08259","price":0E0,"qty":0E0}
Run Code Online (Sandbox Code Playgroud)

这是一个以指数格式输出浮点数的最小程序(ubuntu 20.04,g++ 9.3.0,boost 1.76.0)

#include <iostream>
#include <boost/json/src.hpp>

using namespace std;
namespace bj = boost::json;

int main(void)
{
    bj::object obj1 = {
        {"id", 1},
        {"price", 3343403000000.00},
        {"qty", 13546000000000.00}
    };

    bj::object obj2 = {
        {"id", 2},
        {"price", 0.0},
        {"qty", 0.0}
    };
    cout << "obj1:" << bj::serialize(obj1) << endl;
    cout << "obj2:" << bj::serialize(obj2) << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

obj1:{"id":1,"price":3.343403E12,"qty":1.3546E13}
obj2:{"id":2,"price":0E0,"qty":0E0}
Run Code Online (Sandbox Code Playgroud)

seh*_*ehe 2

据我所知,这不是一个功能。当图书馆在接受之前进行审查时,在 boost 邮件列表上已经有相当多的讨论,所以如果你愿意,你可以检查档案以了解基本原理。

我记得该库专注于促进机器到机器传输的狭窄功能集(99% 的 JSON,例如在 Restful API 中)。这意味着重点关注

  • 使其正确
  • 使其快速

大约一天前出现了同样的事情:Is there a way to switch boost::json::serializer to beautified output? (我引用文档介绍部分)

  • 谢谢你希赫!在查看 boost json 源代码后,我得出了相同的结论。我认为一些下游流程可能会由于看起来非常不同的输出而中断,但令我惊讶的是消费者运行得很好,因为它似乎是 100% 兼容的 json。我最初担心它会丢失双精度/浮点数的担忧已经消除。在观察了一些输出后,它似乎保留了所有有效数字。 (2认同)