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

使用Pentaho Data Integration将多层父级JSON转数据库表报错求助

Pentaho Data Integration (PDI) 嵌套JSON转数据库表排障方案

问题场景

API返回如下嵌套JSON结构,使用PDI构建转换加载到指定数据库表时运行报错:

{
    "report": {
        "accounts": [
            {
                "subheader": "(1-10005)",
                "beginning_balance": {
                    "date": "29/12/2022",
                    "balance": 0
                },
                "content": [
                    {
                        "transaction": {
                            "date": "31/12/2022",
                            "transaction_type": "Bank Deposit",
                            "number": "10002",
                            "description": "description 1",
                            "debit": " 1.000.000,00",
                            "credit": " 0,00",
                            "balance": " 1.000.000,00"
                        }
                    },
                    {
                        "transaction": {
                            "date": "31/12/2022",
                            "transaction_type": "Bank Withdrawal",
                            "number": "10002",
                            "description": "description 2",
                            "debit": " 0,00",
                            "credit": " 300.000,00",
                            "balance": " 700.000,00"
                        }
                    }
                ]
            }
        ]
    }
}

核心排查与解决步骤

1. 修正JSON Input组件路径配置

PDI解析嵌套JSON必须精准设置JSON路径表达式:

  • 提取accounts数组:路径设为$.report.accounts,启用Repeat选项遍历每个账户
  • 提取账户基础字段:subheader路径$.subheader,beginning_balance.date路径$.beginning_balance.date,beginning_balance.balance路径$.beginning_balance.balance
  • 遍历交易数据:路径设为$.content[*].transaction,启用Repeat选项获取每笔交易的所有字段
  • 注意:路径需严格遵循JSONPath规范,避免层级或索引拼写错误

2. 处理数值格式适配

JSON中debit/credit/balance为带千分点、逗号小数的字符串,直接写入数值型字段会报错,需两步转换:

  • 添加Replace in string组件:先替换千分点.为空,搜索值填\.,勾选Regular expression,替换值留空
  • 再次使用Replace in string:替换小数逗号,为.
  • 最后用Convert Fields组件将转换后的字符串转为Number类型(对应数据库DECIMAL/NUMERIC类型)

3. 匹配数据库字段类型与映射

  • 日期字段:数据库表设为DATE/DATETIME类型,PDI中用Convert Fields将DD/MM/YYYY格式的字符串转为日期类型,指定格式为dd/MM/yyyy
  • 数值字段:设置足够精度(如DECIMAL(12,2)),避免溢出
  • 字段映射:确认PDI输出字段名与数据库表字段名完全一致,注意大小写敏感问题

4. 验证数据流每一步结果

  • 用PDI的Preview功能逐组件检查:
    • 预览JSON Input是否正确提取所有嵌套字段,无缺失或空值
    • 预览格式转换后的数值是否符合数据库要求
    • 预览Table Output组件的字段映射是否完全匹配

5. 常见错误快速定位

  • JSON路径错误:报错提示"无法找到指定路径",重新核对路径层级与数组索引
  • 类型转换失败:报错提示"数值转换异常",检查格式转换组件的配置是否正确
  • 数据库写入失败:报错提示"权限不足"或"字段不兼容",确认数据库连接权限、字段类型匹配度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:20