bsoncxx :: to_json返回损坏的字符串

时间:2016-10-28 16:37:49

标签: c++ json c++11 bson mongo-cxx-driver

我在使用bsoncxx将bson文档转换为json字符串时遇到了困难。 bsoncxx :: to_json函数返回一个“无效”/损坏的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)会因“读取访问冲突”而崩溃...

Image

我在程序中到处使用mongodb并访问bson文档,一切正常。我试图在mongodb查询返回的已存在的bson文档上调用bsoncxx :: to_json,但它具有相同的行为......

我正在尝试使用boost tcp套接字将一个字节数组(加上一些信息,比如如何解码字节数组)到nodejs程序,所以我想我可以简单地创建一个带有“二进制字段”的文档,转换它到json并通过tcp套接字流...

任何人都知道如何通过修复bsoncxx :: to_json或使用别的东西来做到这一点?

感谢

编辑:

有关信息,我正在使用Windows 10 x64上的Visual Studio 2015进行编译

1 个答案:

答案 0 :(得分:1)

我通过直接使用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);

似乎工作正常!