在 Java 中将 org.bson.Document 转换为 org.bson.BasicBSONObject?

Posted

技术标签:

【中文标题】在 Java 中将 org.bson.Document 转换为 org.bson.BasicBSONObject?【英文标题】:Convert an org.bson.Document to an org.bson.BasicBSONObject in Java? 【发布时间】:2021-10-05 07:42:43 【问题描述】:

我在 Pentaho 数据集成 (PDI) 又名 Kettle 中有一个字符串,在转换的 UDJC 步骤中。 因此,使用 Java,我需要从 MongoDB 中获取包含 JSON 的字符串,并将其放入 BasicBSONObject 中。 (我可以使用 import 语句,但我不能将东西安装为解决方案的一部分。)

我将字符串放入 org.bson.Document 中,所以看起来困难的部分已经结束,但我仍然不知道如何在这里将一种类型的 bson 转换为另一种类型,从而产生一个 org 类型的对象。 bson.BasicBSONObject

这个错误在最后一行:

import org.bson.Document;
...
String mongoResultString = get(Fields.In, "mongoAsset").getString(r);
Document mongoResultDoc = Document.parse(mongoResultString );
BasicBSONObject mongoResult = (BasicBSONObject) mongoResultDoc;

试过 ecosia、google 和搜索 Stack Overflow。 谢谢。

【问题讨论】:

【参考方案1】:

MongoDB Java 驱动程序库中有一个BasicDBObject#parse 方法,它很可能出现在应用程序的类路径中。该方法根据documentation,将MongoDB Extended JSON格式的字符串解析为BasicDBObject。

可以直接使用,跳过Document解析步骤。

BasicBSONObject mongoResult = BasicDBObject.parse(mongoResultString);

【讨论】:

【参考方案2】:

在多个在线资源建议使用 org.bson.Document 浪费了很多时间之后,然后他们忙于成为 BSON 布道者而无暇提及实际的解决方案部分...... facepalm ...我终于发现这实际上很简单。将字符串解析为 JSON 并立即转换为 BasicBSONObject:

BasicBSONObject mongoResult = (BasicBSONObject) com.mongodb.util.JSON.parse(mongoResultString);

这对我有用,因为我已经知道 mongoResultString 是有效的 JSON,因为它直接来自 Mongo,但可能会将其包装在 try 块中。

不确定性能差异或陷阱,但现在我知道要寻找什么,我也看到了 Eugene 的解决方案可行的证据。 (也更短。接受它作为解决方案。)非常感谢!

【讨论】:

以上是关于在 Java 中将 org.bson.Document 转换为 org.bson.BasicBSONObject?的主要内容,如果未能解决你的问题,请参考以下文章

在java中将bmp转换为jpg

在Java中将字节[]写入文件[关闭]

java 在Java中将Array设置为其他值

在 Java 中将 2e+08 转换为整数

在 Java 中将 'ArrayList<String> 转换为 'String[]'

在 Java 中将 'ArrayList<String> 转换为 'String[]'