我有从外部应用程序获取数据的 Java 应用程序。传入的 JSON 是字符串。我想解析那个字符串并创建 BSON 对象。
不幸的是,我在 Java 的 BSON 实现中找不到 API。
我有像 GSON 那样使用外部解析器吗?
...而且,从 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);
官方文档:
官方 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/
使用Document.parse(String json)
从org.bson.Document
. 它返回Document
类型为 的对象Bson
。
要将字符串 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();
您可能对bson4jackson项目感兴趣,它允许您使用 Jackson 数据绑定来处理 BSON(从 BSON 创建 POJO,写为 BSON)——尤其是因为 Jackson 也使用 JSON。因此,它将允许像您提到的那样进行转换,只需使用不同的 ObjectMapper 实例(一个适用于 JSON,另一个适用于 BSON)。
使用 Jackson,您可以使用完整的 POJO(声明您想要的结构)或使用简单的地图、列表等。您只需要在读取数据时声明要绑定的类型(写入时,类型由您传递的对象定义)。
您将在https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp的源代码中找到您问题的答案, 其中具有 BSON 到 JSON 的转换。
基本上,像
ObjectId("XXX")
->{ "$oid" : "XXX" }
/XXX/gi
->{ "$regex" : "XXX", "$options" : "gi" }
等等...
我建议使用 BasicDBObject 的 toJson() 和 parse(String) 方法,因为 JSON 实用程序类已被 @Depriated。
import com.mongodb.BasicDBObject;
public static BasicDBObject makeBsonObject(String json) {
return BasicDBObject.parse(json);
}
public static String makeJsonObject(BasicDBObject dbObj) {
return dbObj.toJson();
}
我不确定 java 但 mongoDB CPP 驱动程序有一个函数类型
BSONObj fromjson(字符串)
它根据传递的字符串返回一个 BSONObj。Java中也应该有相同的功能。