从JSON字符串创建BSON对象

62

我有一个Java应用程序,它从外部应用程序获取数据。传入的JSON数据是以字符串形式呈现的。我想解析这些字符串并创建BSON对象。

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

我是否需要使用像GSON这样的外部解析器?


谢谢您的回答,汉克。我将使用Jackson,因为我认为GSON不能从对象创建映射表。 - Maciek Sawicki
我也找不到方法,即使他们的“JsonObject”提供了一种获取“Set<Map.Entry>”的方法;我想知道他们为什么做出了这个特定的决定。 - Hank Gay
9个回答

56

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

官方文档:


46

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


在C#中是否有可用的替代方案? - Sunny Sharma
@Sunny,这个问题是关于Java的,我不知道C#,请查看Mongo C#驱动程序源代码,那里一定有像上面那样的实用方法。 - eskatos
4
我确定现在已经太晚了,无法帮助Sunny,但是对于其他人,等同于C#中的是BsonDocument.Parse。请注意,这只是翻译,不包括任何解释或其他信息。 - rrrr-o

17

使用 org.bson.Document 中的 Document.parse(String json) 方法。它将返回一个属于 Bson 类型的 Document 对象。


1
我不明白为什么这不是被接受的答案。显然我误解了问题。 - Tom Quarendon
@TomQuarendon也许是因为这个回答是在问题发布8年后发布的。即使Yair的答案基本相同,但它是在3年前发布的,并没有被选为采纳的答案。 - Kay

14

将一个字符串形式的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();

这段代码所需的库是 org.mongodb:bson - Ilya Serbis

12
最简单的方法似乎是使用JSON库将JSON字符串解析为一个Map,然后使用putAll方法将这些值放入一个BSONObject中。 这个答案展示了如何使用Jackson将JSON字符串解析为一个Map

3
您可能会对bson4jackson项目感兴趣,该项目允许您使用Jackson数据绑定来处理BSON(从BSON创建POJO,写入为BSON)-特别是因为Jackson还可以使用JSON。因此,它将允许像您提到的转换,只需使用不同的ObjectMapper实例(一个用于处理JSON,另一个用于处理BSON)。

使用Jackson,您可以使用完整的POJO(声明所需的结构)或简单的Map、List等进行操作。您只需要在读取数据时声明要绑定到的类型(在写入时,类型由传递的对象定义)。


2

我建议使用BasicDBObject的toJson()和parse(String)方法,因为JSON实用程序类已被@Depricated。

import com.mongodb.BasicDBObject;

public static BasicDBObject makeBsonObject(String json) {
    return BasicDBObject.parse(json);
}

public static String makeJsonObject(BasicDBObject dbObj) {
    return dbObj.toJson();
}

2

1

我不确定Java是否有相应的函数,但MongoDB CPP驱动程序具有函数类型:

BSONObj fromjson(string)

该函数根据传递的字符串返回BSONObj。Java中应该也有相同的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接