我在使用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进行编译
最佳答案
我通过直接使用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);
似乎工作正常!
关于c++ - bsoncxx::to_json返回损坏的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40309483/