56

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

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

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

4

9 回答 9

49

...而且,从 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);

官方文档:

于 2015-10-06T10:16:00.837 回答
44

官方 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/

于 2012-09-04T10:04:37.200 回答
13

使用Document.parse(String json)org.bson.Document. 它返回Document类型为 的对象Bson

于 2018-05-25T18:30:19.957 回答
12

最简单的方法似乎是使用 JSON 库将 JSON 字符串解析为 a Map,然后使用该putAll方法将这些值放入BSONObject.

这个答案展示了如何使用Jackson将 JSON 字符串解析为Map.

于 2010-06-25T11:02:47.643 回答
11

要将字符串 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();
于 2014-05-13T21:06:31.313 回答
3

您可能对bson4jackson项目感兴趣,它允许您使用 Jackson 数据绑定来处理 BSON(从 BSON 创建 POJO,写为 BSON)——尤其是因为 Jackson 也使用 JSON。因此,它将允许像您提到的那样进行转换,只需使用不同的 ObjectMapper 实例(一个适用于 JSON,另一个适用于 BSON)。

使用 Jackson,您可以使用完整的 POJO(声明您想要的结构)或使用简单的地图、列表等。您只需要在读取数据时声明要绑定的类型(写入时,类型由您传递的对象定义)。

于 2011-01-05T22:59:31.957 回答
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" }

等等...

于 2012-04-21T23:32:33.390 回答
2

我建议使用 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();
}
于 2018-04-23T15:04:05.667 回答
1

我不确定 java 但 mongoDB CPP 驱动程序有一个函数类型

BSONObj fromjson(字符串)

它根据传递的字符串返回一个 BSONObj。Java中也应该有相同的功能。

于 2012-01-25T10:55:10.103 回答