2016-10-28 8 views
1

bsoncxxを使用してbsonドキュメントをjson文字列に変換するのが困難です。 bsoncxx :: to_jsonを機能が「無効」/破損のstd ::文字列オブジェクトを返します。.. 私はそれに文字を読み取ることができない、とstd ::文字列が破壊されたときに、それがクラッシュ。..bsoncxx :: to_jsonが破損した文字列を返します

I 「すべてを再構築しまし: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ドキュメントにアクセスしていて、すべてうまくいきます。私はbongcxx :: to_jsonをmongodbクエリによって返された既存のbsonドキュメントで呼び出そうとしましたが、同じ動作をしました...

私はバイト配列をストリーミングしようとしています私は単に、「バイナリフィールド」で文書を作成し、JSONに変換し、TCPソケットの上にストリーミングできると思っていたので

誰もがどのように私を知っている... nodejsプログラムにブーストTCPソケットを使用してバイト配列) bsoncxx :: to_jsonを修正するか、他の何かを使って、それを行うことができますか?

おかげ

編集:

情報については、私はWindows上のVisual Studio 2015でコンパイルしています10のx64

+0

こんにちは、あなたは[SSCCE](http://sscce.org)を提供していただけますか?私はそれをWindowsとLinuxで試してみたいと思います。 – xdg

+0

こんにちは、遅れて申し訳ありません。あなたは、.dllと、すべての、またはメインのcppファイルだけでzipが必要ですか?質問に3行のみの新しいプロジェクトを作成したので、同じ動作をしました。 – pascx64

+0

https://1drv.ms/f/s!AueTJubu1l2CgzPHROVvdil6yOau ここでは、ブーストを除くすべてのものとリンクしています。私はブースト1.61を使用しています – pascx64

答えて

1

私が代わりにbsoncxxの、直接libbson使用して問題を修正しました... I 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); 

正常に動作するようです!

関連する問題