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

Pentaho PDI 8.2中将未知列结构的Excel每行动态转为JSON的方法

Pentaho PDI 8.2 未知列Excel行转JSON实现方案

核心结论

  • User Defined Java Class(UDJC)是你当前场景下最适合的实现方式,实现成本低、稳定性高,完全满足列数列名不固定、小数据量的要求
  • PDI 8.2没有内置支持动态读取行元数据生成整行JSON的标准步骤,标准JSON Output步骤需要设计期固定字段schema,无法适配你的需求

具体实现步骤

步骤1:配置Excel输入

使用Microsoft Excel Input步骤读取xlsx文件,按常规配置文件路径、表头行数即可,不需要固定字段配置:

  • 「内容」标签页勾选表头行存在(若你的文件有表头),填写对应表头行数
  • 「字段」标签页可点击「获取字段」预览当前测试文件的列,无需手动修改或固定字段,运行时会自动读取实际文件的全部列结构

步骤2:配置User Defined Java Class步骤

  1. 将UDJC步骤与Excel输入步骤相连
  2. 打开UDJC配置页,切换到「字段」标签,新增两个输出字段:
    • row_number:类型为Integer,存储行顺序索引
    • json:类型为String,长度建议设置为10000以上,存储整行序列化后的JSON字符串
  3. 切换到「代码」标签,输入如下代码:
import org.json.JSONObject;
import org.pentaho.di.core.row.RowMetaInterface;

// 行计数器,成员变量会在转换运行周期内保持
private int rowCounter = 0;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
  // 获取输入行
  Object[] inputRow = getRow();
  // 所有行处理完成后退出
  if (inputRow == null) {
    setOutputDone();
    return false;
  }

  // 获取运行时当前行的元数据(包含所有动态字段的名称、类型信息)
  RowMetaInterface inputMeta = getInputRowMeta();
  JSONObject jsonObj = new JSONObject();

  // 遍历所有动态字段,全部转为字符串存入JSON
  for (int i = 0; i < inputMeta.size(); i++) {
    String fieldName = inputMeta.getValueMeta(i).getName();
    String fieldValue = inputMeta.getString(inputRow, i);
    jsonObj.put(fieldName, fieldValue);
  }

  // 生成输出行
  rowCounter++;
  Object[] outputRow = createOutputRow(inputRow, 2);
  // 给新增的输出字段赋值
  outputRow[inputMeta.size()] = rowCounter;
  outputRow[inputMeta.size() + 1] = jsonObj.toString();

  // 输出行到下一个步骤
  putRow(data.outputRowMeta, outputRow);
  return true;
}

步骤3:依赖补充(可选)

如果运行时提示org.json.JSONObject类不存在,可自行下载org.json的jar包放入PDI安装目录的lib文件夹下,重启PDI即可。

替代方案说明

如果不想写Java代码,也可以使用「Modified Java Script Value」步骤实现,逻辑和上述Java代码一致,1000行以内的小数据量场景下差异不大,UDJC的运行稳定性和执行效率相对更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:42:02