从JSONstring创buildBSON对象

我有从外部应用程序获取数据的Java应用程序。 传入的JSON在string中。 我想parsing这个string并创buildBSON对象。

不幸的是,在Java的BSON实现中我找不到API。

我有像GSON那样使用外部parsing器吗?

最简单的方法似乎是使用JSON库将JSONstringparsing为Map ,然后使用putAll方法将这些值放入BSONObject

这个答案显示了如何使用Jackson来parsing一个JSONstring到一个Map

官方的MongoDB Java驱动程序附带了用于将JSONparsing为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 ); 

驱动程序可以在这里find: 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); 

官方文档:

  • Document.parse(string)
  • Document.toJson()

要将stringjson转换为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创buildPOJO,写为BSON) – 尤其是因为Jackson也使用JSON。 所以它会允许像你提到的转换,只是使用不同的ObjectMapper instanstaces(一个与JSON,其他与BSON)。

与jackson,你可以工作与完整的POJO(声明你想要的结构)或简单的地图,列表等。 您只需要声明在读取数据时要绑定的内容(写入时,types由您传递的对象定义)。

你可以在https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp的源代码中find你的问题的答案,它具有BSON到JSON的转换。;

基本上,东西像

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

等等…

我不确定Java,但mongoDB CPP驱动程序有一个函数types

BSONObj fromjson(string)

它根据传递的string返回一个BSONObj。 在Java中也应该有相同的function。