Java外部アプリからデータを取得するアプリです。着信JSONは文字列です。その文字列を解析し、BSONオブジェクトを作成します。
残念ながら、JavaのBSON実装にはそのためのAPIが見つかりません。
GSONのような外部パーサーを使用していますか?
公式MongoDB Javaドライバには、JSONをBSONに解析し、BSONをJSONにシリアル化するユーティリティメソッドが付属しています。
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
DBObject dbObj = ... ;
String json = JSON.serialize( dbObj );
DBObject bson = ( DBObject ) JSON.parse( json );
ドライバはここにあります: https://mongodb.github.io/mongo-Java-driver/
...そして、3.0.0以降、次のことができます。
import org.bson.Document;
final Document doc = new Document("myKey", "myValue");
final String jsonString = doc.toJson();
final Document doc = Document.parse(jsonString);
公式ドキュメント:
文字列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();
_org.bson.Document
_のDocument.parse(String json)
を使用します。 Document
型のBson
オブジェクトを返します。
bson4jackson プロジェクトに興味があるかもしれません。これは、Jacksonデータバインディングを使用してBSONを操作できるようにします(BSONからPOJOを作成し、BSONとして作成)。したがって、あなたが言及したような変換が可能になり、異なるObjectMapperインスタンス(JSONで動作するものとBSONで動作するもの)を使用するだけです。
Jacksonを使用すると、完全なPOJO(必要な宣言構造)または単純なマップ、リストなどを操作できます。データを読み取るときにバインドするタイプを宣言する必要があります(書き込みの場合、タイプは渡すオブジェクトによって定義されます)。
JSONユーティリティクラスは@Depricatedであるため、BasicDBObjectのtoJson()およびparse(String)メソッドを使用することをお勧めします。
import com.mongodb.BasicDBObject;
public static BasicDBObject makeBsonObject(String json) {
return BasicDBObject.parse(json);
}
public static String makeJsonObject(BasicDBObject dbObj) {
return dbObj.toJson();
}
あなたの質問に対する答えは https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp のソースコードにありますJSON変換。
基本的には
ObjectId("XXX")
-> { "$oid" : "XXX" }
/XXX/gi
-> { "$regex" : "XXX", "$options" : "gi" }
等々...
Javaについてはわかりませんが、mongoDB CPPドライバーには関数タイプがあります
BSONObj fromjson(string)
渡された文字列に従ってBSONObjを返します。 Javaも同じ関数が必要です。