外部アプリからデータを取得する Java アプリがあります。着信 JSON は文字列です。その文字列を解析して BSON オブジェクトを作成したいと思います。
残念ながら、Java の BSON 実装でそのための API を見つけることができません。
GSONのように外部パーサーを使用していますか?
Official MongoDB Java Driver comes with utility methods for parsing JSON to BSON and serializing BSON to JSON.
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
DBObject dbObj = ... ;
String json = JSON.serialize( dbObj );
DBObject bson = ( DBObject ) JSON.parse( json );
The driver can be found here: https://mongodb.github.io/mongo-java-driver/
文字列 json を bson に変換するには、次のようにします。
import org.bson.BasicBSONEncoder;
import org.bson.BSONObject;
BSONObject bson = (BSONObject)com.mongodb.util.JSON.parse(string_json);
BasicBSONEncoder encoder = new BasicBSONEncoder();
byte[] bson_byte = encoder.encode(bson);
bson を json に変換するには、次のようにします。
import org.bson.BasicBSONDecoder;
import org.bson.BSONObject;
BasicBSONDecoder decoder = new BasicBSONDecoder();
BSONObject bsonObject = decoder.readObject(out);
String json_string = bsonObject.toString();
bson4jacksonプロジェクトに興味があるかもしれません。Jackson のデータ バインディングを使用して BSON を操作する (BSON から POJO を作成し、BSON として書き込む) ことができます。特に、Jackson も JSON を操作するためです。したがって、あなたが言及したような変換が可能になります。異なる ObjectMapper インスタンス (JSON で動作するインスタンス、BSON で動作するインスタンス) を使用するだけです。
Jackson を使用すると、完全な POJO (必要な構造を宣言する) または単純なマップ、リストなどを操作できます。データを読み取るときにバインドする型を宣言するだけです (書き込みの場合、型は渡すオブジェクトによって定義されます)。
質問に対する答え は、BSON から JSON への変換を含むhttps://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cppのソース コードにあります。
基本的に、次のようなもの
ObjectId("XXX")
->{ "$oid" : "XXX" }
/XXX/gi
->{ "$regex" : "XXX", "$options" : "gi" }
等々...
Javaについてはよくわかりませんが、mongoDB CPPドライバーには関数型があります
BSONObj fromjson(文字列)
渡された文字列に従って BSONObj を返します。Javaにも同じ機能があるはずです。