質問

外部アプリからデータを取得するJavaアプリがあります。入ってくるJsonsは文字列にあります。その文字列を解析し、BSONオブジェクトを作成したいと思います。

残念ながら、JavaのBSON実装ではAPIが見つかりません。

GSONのような外部パーサーを使用していますか?

役に立ちましたか?

解決

最も簡単な方法は、JSONライブラリを使用してJSON文字列を解析することです Map そして、を使用します putAll これらの値をaに置く方法 BSONObject.

この答え 使用方法を示しています ジャクソン JSON文字列を解析します Map.

他のヒント

公式の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();

使用する Document.parse(String json) から org.bson.Document. 。それは戻ってきます Document タイプのオブジェクト Bson.

あなたは興味があるかもしれません bson4jackson Jackson Data Bindingを使用してBSON(BSONのPojos Create、Bsonとして書く)を使用できるプロジェクト - 特にJacksonもJSONと連携しているためです。したがって、あなたが言及するように変換を可能にし、異なるObjectMapper InstanStaces(1つはJSON、もう1つはBSONで動作するもの)を使用します。

ジャクソンを使用すると、フルポジョス(必要な構造を宣言)またはシンプルなマップ、リストなどで作業できます。データを読み取るときにバインドするタイプを宣言する必要があります(書くとき、タイプは渡すオブジェクトによって定義されます)。

あなたはあなたの質問に対する答えをのソースコードで見つけるでしょう https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cppBSONからJSON変換があります。

基本的に、ようなもの

  • ObjectId("XXX") -> { "$oid" : "XXX" }
  • /XXX/gi -> { "$regex" : "XXX", "$options" : "gi" }

等々...

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();
}

Javaについてはわかりませんが、Mongodb CPPドライバーには関数タイプがあります

bsonobj fromjson(string)

渡された文字列に従ってbsonobjを返します。 Javaにも同じ機能があるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top