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

Convert an org.bson.Document to an org.bson.BasicBSONObject in Java?

我在 Pentaho 数据集成 (PDI) 中有一个字符串 a.k.a。 Kettle,在转换的 UDJC 步骤中。 因此,使用 Java,我需要从 MongoDB 中取出包含 JSON 的字符串,并将其放入 BasicBSONObject 中。 (我可以使用 import 语句,但我无法将其作为解决方案的一部分进行安装。)

我把 String 变成了 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。 谢谢

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

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

BasicBSONObject mongoResult = BasicDBObject.parse(mongoResultString);

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

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

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

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