Java 从JSON字符串创建BSON对象

Java 从JSON字符串创建BSON对象,java,json,mongodb,bson,Java,Json,Mongodb,Bson,我有一个Java应用程序,它从外部应用程序获取数据。传入的JSON是字符串。我想解析这些字符串并创建BSON对象 不幸的是,我在Java的BSON实现中找不到这方面的API 我有没有像GSON那样使用外部解析器?最简单的方法似乎是使用JSON库将JSON字符串解析为映射,然后使用该方法将这些值放入BSONObject 演示如何使用将JSON字符串解析为您可能感兴趣的项目的映射,该项目允许您使用Jackson数据绑定来处理BSON(从BSON创建POJO,编写为BSON)——特别是因为Jackso

我有一个Java应用程序,它从外部应用程序获取数据。传入的JSON是字符串。我想解析这些字符串并创建BSON对象

不幸的是,我在Java的BSON实现中找不到这方面的API


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

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


演示如何使用将JSON字符串解析为您可能感兴趣的项目的映射,该项目允许您使用Jackson数据绑定来处理BSON(从BSON创建POJO,编写为BSON)——特别是因为Jackson也处理JSON。因此,它将允许您提到的转换,只需使用不同的ObjectMapper实例(一个用于JSON,另一个用于BSON)


使用Jackson,您可以使用完整的POJO(声明您想要的结构),也可以使用简单的映射、列表等。在读取数据时,您只需要声明要绑定到的类型(在写入数据时,类型由您传递的对象定义)。

我不确定java,但mongoDB CPP驱动程序有一个函数类型

BSONObj fromjson(字符串)


它根据传递的字符串返回BSONObj。Java中也应该有相同的函数。

您可以在的源代码中找到问题的答案 它具有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 );

可以在此处找到驱动程序:

要将字符串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);
官方文件:


我建议使用BasicDBObject的toJson()和parse(String)方法,因为JSON实用程序类已经被@debricated了

import com.mongodb.BasicDBObject;

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

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

使用
org.bson.Document
中的
Document.parse(字符串json)
。它返回
Document
对象,该对象的类型为
Bson

谢谢你的回答,汉克。我将使用Jakcson,因为我认为GSON无法从对象中装箱映射。我也找不到这样做的方法,即使他们的
JsonObject
为您提供了获取
集的方法;我想知道他们为什么会做出这样的决定。在C#中是否有其他类似的选择?@Sunny这个问题是关于Java的,我不知道C#,看看Mongo C#驱动程序源代码,一定有像上面那样的实用方法,我相信这对Sunny来说已经太晚了,但是对于其他遇到这个问题的人来说,C#中的等效方法只是
b文档。解析
我不明白为什么这不是公认的答案。我显然误解了这个问题。@TomQuarendon可能是因为这个答案是在这个问题8年后发布的。即使是yair的答案基本相同,但在3年前发布,也没有被选为公认的答案。