我有从外部应用程序获取数据的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