从JSON字符串创建BSON对象

时间:2010-06-25 10:13:02

标签: java json mongodb bson

我有Java应用程序从外部应用程序获取数据。传入的JSON位于字符串中。我想解析字符串并创建BSON对象。

遗憾的是,我无法在Java的BSON实现中找到API。

我是否像GSON一样使用外部解析器?

9 个答案:

答案 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