2016-10-28 191 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); 

似乎工作正常!