You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDI(Kettle)中org.bson.Document转BasicBSONObject的实现方法

问题原因

直接强制类型转换失败的核心原因是:org.bson.Document 与 org.bson.BasicBSONObject 为平级的BSON实现类,二者均实现了Map<String,Object>与BSONObject接口,不存在继承关系,强转必然抛出ClassCastException。

可行实现方案

所有方案仅依赖MongoDB BSON原生API,无需额外安装任何组件,可直接在PDI UDJC步骤中使用。

方案1:简单场景快速转换

适用于JSON结构无嵌套,或嵌套元素不需要严格为BSONObject子类型的场景,代码量少执行效率高。

依赖导入

import org.bson.Document;
import org.bson.BasicBSONObject;

实现代码

String mongoResultString = get(Fields.In, "mongoAsset").getString(r);
Document mongoResultDoc = Document.parse(mongoResultString );
// 直接利用BasicBSONObject的Map构造器完成转换
BasicBSONObject mongoResult = new BasicBSONObject(mongoResultDoc);

方案2:全复杂嵌套结构兼容

适用于存在多层嵌套对象、数组的JSON结构,可完整转换全层级的BSON类型,不存在嵌套元素类型异常问题。

依赖导入

import org.bson.Document;
import org.bson.BasicBSONObject;
import org.bson.BSON;
import org.bson.BSONObject;

实现代码

String mongoResultString = get(Fields.In, "mongoAsset").getString(r);
Document mongoResultDoc = Document.parse(mongoResultString );
// 先编码为BSON字节流再解码为BasicBSONObject,全结构兼容
byte[] bsonBytes = BSON.encode(mongoResultDoc);
BasicBSONObject mongoResult = (BasicBSONObject) BSON.decode(bsonBytes);

内容的提问来源于stack exchange,提问作者Nathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:57:03