我有Java应用程序从外部应用程序获取数据。传入的JSON位于字符串中。我想解析字符串并创建BSON对象。
遗憾的是,我无法在Java的BSON实现中找到API。
我是否像GSON一样使用外部解析器?
答案 0 :(得分:38)
官方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/
答案 1 :(得分:36)
...而且,从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);
官方文档:
答案 2 :(得分:11)
最简单的方法似乎是使用JSON库将JSON字符串解析为Map
,然后使用putAll
方法将这些值放入BSONObject
。
This answer显示了如何使用Jackson将JSON字符串解析为Map
。
答案 3 :(得分:9)
要将字符串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();
答案 4 :(得分:3)
您可能对bson4jackson项目感兴趣,它允许您使用Jackson数据绑定与BSON一起工作(从BSON创建POJO,写为BSON) - 特别是因为Jackson也使用JSON。所以它会像你提到的那样允许转换,只需使用不同的ObjectMapper instanstaces(一个适用于JSON,另一个适用于BSON)。
使用Jackson,您可以使用完整的POJO(声明您想要的结构)或使用简单的地图,列表等。您只需要在读取数据时声明要键入的内容(写入时,类型由您传递的对象定义)。
答案 5 :(得分:2)
您可以在https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp的源代码中找到问题的答案。 其中有BSON到JSON的转换。
基本上,像
这样的东西ObjectId("XXX")
- > { "$oid" : "XXX" }
/XXX/gi
- > { "$regex" : "XXX", "$options" : "gi" }
依旧......
答案 6 :(得分:1)
我不确定java但是mongoDB CPP驱动程序有一个函数类型
BSONObj fromjson(string)
根据传递的字符串返回BSONObj。 Java中也应该有相同的功能。
答案 7 :(得分:1)
我建议使用BasicDBObject的toJson()和parse(String)方法,因为JSON实用程序类已经被@Dricricated。
import com.mongodb.BasicDBObject;
public static BasicDBObject makeBsonObject(String json) {
return BasicDBObject.parse(json);
}
public static String makeJsonObject(BasicDBObject dbObj) {
return dbObj.toJson();
}
答案 8 :(得分:1)
使用Document.parse(String json)
中的org.bson.Document
。它返回Document
对象,其类型为Bson
。