从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。