我有Java应用程序从外部应用程序中获取数据。传入的JSON在弦上。我想解析串并创建BSON对象。

不幸的是,我在Java的BSON实施中找不到API。

我是否有像Gson这样的外部解析器?

有帮助吗?

解决方案

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

这个答案 显示如何使用 杰克逊 将json字符串解析为 Map.

其他提示

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/

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

官方文档:

要将字符串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();

采用 Document.parse(String json)org.bson.Document. 。它返回 Document 对象是 Bson.

您可能对 BSON4JACKSON Project,该项目使您可以使用Jackson数据绑定来与BSON(创建BSON的Pojos,写为BSON) - 特别是因为Jackson还与JSON合作。因此,它将像您提到的那样允许转换,只需使用不同的ObjectMapper instanstace(一个与JSON一起使用,另一种与BSON一起使用)。

使用Jackson,您可以使用完整的Pojos(声明结构)或简单的地图,列表等工作。您只需要声明在读取数据时要绑定的内容(写作时,类型是由您通过的对象定义的)。

您会在 https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp这使BSON转换为JSON。

基本上,像

  • ObjectId("XXX") -> { "$oid" : "XXX" }
  • /XXX/gi -> { "$regex" : "XXX", "$options" : "gi" }

等等...

我建议使用basicDBobject的tojson()和解析方法(字符串)方法,因为JSON UTILISTILS类已被 @depricriced。

import com.mongodb.BasicDBObject;

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

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

我不确定Java,但MongoDB CPP驱动程序具有功能类型

bsonobj fromjson(字符串)

根据通过的字符串返回BSONOBJ。 Java也应该有相同的功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top