我在使用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)会因“读取访问冲突”而崩溃...
我在程序中到处使用mongodb并访问bson文档,一切正常。我试图在mongodb查询返回的已存在的bson文档上调用bsoncxx :: to_json,但它具有相同的行为......
我正在尝试使用boost tcp套接字将一个字节数组(加上一些信息,比如如何解码字节数组)到nodejs程序,所以我想我可以简单地创建一个带有“二进制字段”的文档,转换它到json并通过tcp套接字流...
任何人都知道如何通过修复bsoncxx :: to_json或使用别的东西来做到这一点?
感谢
编辑:
有关信息,我正在使用Windows 10 x64上的Visual Studio 2015进行编译
答案 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);
似乎工作正常!