bsoncxx::to_json return 损坏的字符串

bsoncxx::to_json return corrupted string

我在使用 bsoncxx 将 bson 文档转换为 json 字符串时遇到困难。 bsoncxx::to_json 函数 return 一个 "invalid"/损坏的 std::string 对象.. 我无法读取其中的字符,当 std::string 被破坏时它崩溃了..

我已经重建了一切:mongoc、libbson、mongocxx 等...

这是一个示例代码:

bsoncxx::builder::basic::document doc{};
doc.append(bsoncxx::builder::basic::kvp("test", 1));
auto string = bsoncxx::to_json(doc);

我无法从字符串中提取数据,因为当我尝试使用 std::copy 复制内容时 std::end(string) 崩溃并出现 "read access violation"...

我在程序的任何地方都使用 mongodb 并访问 bson 文档并且一切正常。我试图通过 mongodb 查询对已经存在的 bson 文档 return 调用 bsoncxx::to_json,但它具有相同的行为...

我正在尝试使用 boost tcp 套接字将字节数组(另外,一些信息,如如何解码字节数组)流式传输到 nodejs 程序,所以我想我可以简单地创建一个带有 "binary field", 将其转换为 json 并通过 tcp 套接字传输...

任何人都知道我该怎么做,要么修复 bsoncxx::to_json,要么使用其他东西?

谢谢

编辑:

有关信息,我正在 Windows 10 x64

上使用 Visual Studio 2015 进行编译

我通过直接使用 libbson 而不是 bsoncxx 解决了这个问题...我查看了 bsoncxx::to_json 中的代码并提取了它:

std::string ret;

bson_t bson;
auto view = document.view();
bson_init_static(&bson, view.data(), view.length());

size_t size;
auto result = bson_as_json(&bson, &size);
if (!result)
    return "Error converting to json";

ret = std::string(result);

bson_free(result);

return std::move(ret);

似乎工作正常!