2010-06-25 203 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); 

官方文檔: