mongo-cxx-driver 加倍到 json
mongo-cxx-driver doubles to json
在试验 MongoDB 的 C++11 驱动程序(版本 3.1.0-rc0)时,以下代码的输出让我感到困惑。
#include <iostream>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>
int main() {
bsoncxx::builder::stream::document s;
s << "x" << 1.0;
std::cout << bsoncxx::to_json(s) << std::endl;
return 0;
}
输出:
{ "x" : 1 }
- 这是预期的行为吗?
- 如何确保 BSON 双精度数在 JSON 中表示为浮点数?
配置: CentOS 7, gcc 6.2.0, mongo-c-driver 1.5.0, mongo-cxx-driver 3.1.0 -rc0
看起来这种行为是 libbson 固有的,它提供了 JSON 序列化。这在技术上是正确的,因为 Javascript 不区分数字类型,但我理解您希望它保留小数部分,即使是 0。
所以目前,您的问题的答案是
- 没有预料到,但并不奇怪。
- 目前,您无法从 mongocxx 执行此操作。您可以迭代 BSON 结构并使用另一个 JSON 库构建一个 JSON 文档。
我也会与 libbson 维护者讨论这个问题。 (更新:已提交工单 CDRIVER-1945)。
在试验 MongoDB 的 C++11 驱动程序(版本 3.1.0-rc0)时,以下代码的输出让我感到困惑。
#include <iostream>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>
int main() {
bsoncxx::builder::stream::document s;
s << "x" << 1.0;
std::cout << bsoncxx::to_json(s) << std::endl;
return 0;
}
输出:
{ "x" : 1 }
- 这是预期的行为吗?
- 如何确保 BSON 双精度数在 JSON 中表示为浮点数?
配置: CentOS 7, gcc 6.2.0, mongo-c-driver 1.5.0, mongo-cxx-driver 3.1.0 -rc0
看起来这种行为是 libbson 固有的,它提供了 JSON 序列化。这在技术上是正确的,因为 Javascript 不区分数字类型,但我理解您希望它保留小数部分,即使是 0。
所以目前,您的问题的答案是
- 没有预料到,但并不奇怪。
- 目前,您无法从 mongocxx 执行此操作。您可以迭代 BSON 结构并使用另一个 JSON 库构建一个 JSON 文档。
我也会与 libbson 维护者讨论这个问题。 (更新:已提交工单 CDRIVER-1945)。