web-dev-qa-db-ja.com

JSON文字列からBSONオブジェクトを作成する

Java外部アプリからデータを取得するアプリです。着信JSONは文字列です。その文字列を解析し、BSONオブジェクトを作成します。

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

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

44
Maciek Sawicki

最も簡単な方法は、JSONライブラリを使用してJSON文字列をMapに解析し、 putAll メソッドを使用してそれらの値をBSONObject

この回答 は、JSON文字列をMapに解析するために Jackson を使用する方法を示しています。

12
Hank Gay

公式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/

39
eskatos

...そして、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);

公式ドキュメント:

38
yair

文字列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();
10
Leticia Santos

_org.bson.Document_のDocument.parse(String json)を使用します。 Document型のBsonオブジェクトを返します。

5
ultimatex

bson4jackson プロジェクトに興味があるかもしれません。これは、Jacksonデータバインディングを使用してBSONを操作できるようにします(BSONからPOJOを作成し、BSONとして作成)。したがって、あなたが言及したような変換が可能になり、異なるObjectMapperインスタンス(JSONで動作するものとBSONで動作するもの)を使用するだけです。

Jacksonを使用すると、完全なPOJO(必要な宣言構造)または単純なマップ、リストなどを操作できます。データを読み取るときにバインドするタイプを宣言する必要があります(書き込みの場合、タイプは渡すオブジェクトによって定義されます)。

3
StaxMan

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

あなたの質問に対する答えは https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp のソースコードにありますJSON変換。

基本的には

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

等々...

2

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

BSONObj fromjson(string)

渡された文字列に従ってBSONObjを返します。 Javaも同じ関数が必要です。

1
mayank_gupta