2016-10-28 198 views
1

我在使用bsoncxx将bson文档转换为json字符串时遇到困难。 的bsoncxx :: to_json函数返回一个“无效” /损坏的std :: string对象.. 我在那里不能读取的字符,它崩溃时的std :: string被破坏..bsoncxx :: to_json返回损坏的字符串

我“已经重建的一切:mongoc,libbson,mongocxx等..

下面是一个示例代码:

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

我不能提取字符串中的数据,因为的std ::结束(串)当我尝试使用std :: copy复制内容时发生崩溃,导致“读取访问冲突”...

Image

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

我试图流式传输一个字节数组(另外,一些信息,如如何解码字节数组)使用boost tcp套接字到nodejs程序,所以我想我可以简单地创建一个带有“二进制字段”的文档,将其转换为json并通过tcp套接字将其流式传输...

任何人都知道我可以做到这一点,无论是通过修复bsoncxx :: to_json,或通过使用别的东西?

感谢

编辑:

有关信息,我与Visual Studio 2015年的Windows编译10 64

+0

嗨,你能否提供[SSCCE](http://sscce.org)?我想在Windows和Linux上尝试一下,看看我是否可以复制它。 – xdg

+0

嗨,对不起,延迟。你需要一个压缩与.dll和everthing或只有主要的cpp文件?因为我在问题(+包含)中只做了一个3行项目,它具有相同的行为 – pascx64

+0

https://1drv.ms/f/s!AueTJubu1l2CgzPHRovvdil6yOau 这里是除了boost之外的所有内容的链接。我正在使用boost 1.61 – pascx64

回答

1

我固定的,而不是bsoncxx直接使用libbson的问题,我...看了一下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); 

似乎工作正常!