我有從外部應用程序獲取數據的Java應用程序。傳入的JSON位於字符串中。我想解析該字符串並創建BSON對象。從JSON字符串創建BSON對象
不幸我在Java的BSON實現中找不到API。
我有像GSON那樣使用外部解析器嗎?
我有從外部應用程序獲取數據的Java應用程序。傳入的JSON位於字符串中。我想解析該字符串並創建BSON對象。從JSON字符串創建BSON對象
不幸我在Java的BSON實現中找不到API。
我有像GSON那樣使用外部解析器嗎?
最簡單的方法似乎是使用JSON庫將JSON字符串解析爲Map
,然後使用putAll
方法將這些值放入BSONObject
。
This answer顯示如何使用Jackson將JSON字符串解析爲Map
。
您可能對bson4jackson項目感興趣,它允許您使用Jackson數據綁定與BSON一起工作(從BSON創建POJO,寫爲BSON) - 特別是因爲Jackson還使用JSON。所以它會允許像你提到的轉換,只是使用不同的ObjectMapper instanstaces(一個與JSON協同工作,另一個與BSON協同工作)。
隨着傑克遜,你可以使用完整的POJO(聲明你想要的結構)或簡單的地圖,列表等。您只需要聲明在讀取數據時要綁定的內容(寫入時,類型由您傳遞的對象定義)。
我不知道Java,但MongoDB的CPP驅動程序有一個功能型
BSONObj fromjson(串)
根據傳遞的字符串,返回BSONObj。在Java中也應該有相同的功能。
您可以在源代碼https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp 中找到問題的答案,其中BSON轉換爲JSON。
基本上,這樣的東西
ObjectId("XXX")
- >{ "$oid" : "XXX" }
/XXX/gi
- >{ "$regex" : "XXX", "$options" : "gi" }
等等...
官方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#中有相同的替代方案嗎? – 2014-01-08 07:39:46
@Sunny這個問題是關於Java,我不知道有關C#,看看Mongo C#驅動程序源碼,必須有像 – eskatos 2014-01-08 09:39:19
以上的實用程序方法很酷......感謝您的回覆。 – 2014-01-08 10:44:35
將一個字符串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();
...而且,自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);
官方文檔:
感謝漢克的答案。我將使用Jakcson,因爲我認爲GSON不能從對象中創建映射。 – 2010-06-25 11:23:34
即使他們的'JsonObject'提供了一種獲取'Set'的方法,我也找不到這種方法。我想知道他們爲什麼做出這樣的決定。 –
2010-06-25 15:19:57