2010-06-25 164 views
36

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

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

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

+0

感谢汉克的答案。我将使用Jakcson,因为我认为GSON不能从对象中创建映射。 – 2010-06-25 11:23:34

+0

即使他们的'JsonObject'提供了一种获取'Set '的方法,我也找不到这种方法。我想知道他们为什么做出这样的决定。 – 2010-06-25 15:19:57

回答

11

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

This answer显示如何使用Jackson将JSON字符串解析为Map

3

您可能对bson4jackson项目感兴趣,它允许您使用Jackson数据绑定与BSON一起工作(从BSON创建POJO,写为BSON) - 特别是因为Jackson还使用JSON。所以它会允许像你提到的转换,只是使用不同的ObjectMapper instanstaces(一个与JSON协同工作,另一个与BSON协同工作)。

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

1

我不知道Java,但MongoDB的CPP驱动程序有一个功能型

BSONObj fromjson(串)

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

36

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

+0

在C#中有相同的替代方案吗? – 2014-01-08 07:39:46

+0

@Sunny这个问题是关于Java,我不知道有关C#,看看Mongo C#驱动程序源码,必须有像 – eskatos 2014-01-08 09:39:19

+0

以上的实用程序方法很酷......感谢您的回复。 – 2014-01-08 10:44:35

8

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

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

官方文档: