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

NiFi使用JsonPathReader/JsonTreeReader转换JSON到CSV失败求助

解决NiFi中JSON转CSV只输出表头的问题

看起来你遇到的核心问题是JSON数据嵌套层级较深,Reader没有正确定位到目标记录数组,也没提取到嵌套字段的值。我来帮你一步步调整配置:

问题根源

你的目标记录都在content.data.erpDataObjects这个数组里,每个记录的number和id又嵌套在head.fields.{field}.value路径下,当前的Reader和Schema配置没有正确映射这些路径。


方案1:使用JsonTreeReader(推荐)

1. 调整Avro Schema

修改你的Schema,通过字段的doc属性指定每个字段对应的JSON路径,让Reader能精准提取值:

{
  "type": "record",
  "name": "ErpRecord",
  "fields": [
    {
      "name": "number",
      "type": "string",
      "doc": "$.head.fields.number.value"
    },
    {
      "name": "id",
      "type": "string",
      "doc": "$.head.fields.id.value"
    }
  ]
}

2. 配置JsonTreeReader

在Reader的配置界面:

  • 设置Root JSON Path为$.content.data.erpDataObjects,告诉Reader从这个数组开始读取记录
  • 开启Treat Array as Multiple Records(设为true),这样数组里的每个元素都会被当作一条独立记录

方案2:使用JsonPathReader

如果你更习惯用JsonPath来定位:

1. 配置JsonPathReader

  • Json Path Expression设置为$.content.data.erpDataObjects[*],[*]表示选中数组里的所有元素,每个元素对应一条记录
  • 在Field Mapping部分添加两个映射:
    • 目标字段number对应JSON路径$.head.fields.number.value
    • 目标字段id对应JSON路径$.head.fields.id.value

2. 关联Schema(可选)

如果需要用AvroSchemaRegistry,Schema可以和方案1里的保持一致,确保字段名和类型匹配。


最后检查ConvertRecord和Writer

  • 确保CSVRecordSetWriter的Include Header Line设为true,字段顺序和Schema/映射一致
  • 确认ConvertRecord的Reader和Writer都正确关联了对应的配置和Schema

你可以先用EvaluateJsonPath处理器测试一下路径是否正确,比如提取$.content.data.erpDataObjects,看看能不能得到多个元素,这样能快速验证路径是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:47:27