在 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?的主要内容,如果未能解决你的问题,请参考以下文章