56

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

残念ながら、Java の BSON 実装でそのための API を見つけることができません。

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

4

9 に答える 9

44

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/

于 2012-09-04T10:04:37.200 に答える
12

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

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

于 2010-06-25T11:02:47.643 に答える
11

文字列 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();
于 2014-05-13T21:06:31.313 に答える
3

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

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

于 2011-01-05T22:59:31.957 に答える
2

質問に対する答え は、BSON から JSON への変換を含むhttps://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cppのソース コードにあります。

基本的に、次のようなもの

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

等々...

于 2012-04-21T23:32:33.390 に答える
1

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

BSONObj fromjson(文字列)

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

于 2012-01-25T10:55:10.103 に答える