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

如何从嵌套JSON中提取精准数据?已尝试SplitJson和EvaluateJson处理器未果

解决NiFi SplitJson和EvaluateJson提取嵌套JSON数据的问题

我明白你在处理这个多层嵌套JSON时遇到的麻烦了——这种对象套对象的结构确实容易在配置JsonPath时踩坑,我来一步步帮你搞定。

先理清楚你的JSON核心结构:

{
  "affiliate": {
    "name": "affiliate",
    "apiLists": {
      "category1": { /* 分类1的API数据 */ },
      "category2": { /* 分类2的API数据 */ }
    }
  }
}

apiLists是一个对象(不是数组),里面的每个键(比如category1)对应一个分类的完整数据,每个分类下又有availableVariants对象,包含多个版本的API配置。

步骤1:用SplitJson拆分每个分类(category)

首先我们需要把apiLists下的每个分类拆成单独的流文件,这样后续处理更灵活:

  • 配置SplitJson处理器:
    • JsonPath Expression:$.affiliate.apiLists.*
      这个表达式的意思是:取affiliate.apiLists下的所有子对象(不管键名是什么)。

拆分后,每个流文件的内容会是单个分类的完整数据,比如category1的内容:

{
  "availableVariants": {
    "v1.1.0": {
      "resourceName": "category1",
      "put": null,
      "delete": null,
      "post": null
    },
    "v0.1.0": {
      "resourceName": "category1",
      "put": null,
      "delete": null
    }
  },
  "apiName": "category1"
}

同时,NiFi会自动给每个流文件添加split.key属性,值就是原对象的键(比如category1),这个属性后面可以直接引用。

步骤2:(可选)拆分每个版本的API信息

如果需要把每个版本(比如v1.1.0、v0.1.0)也拆成单独的流文件,再添加一个SplitJson处理器:

  • JsonPath Expression:$.availableVariants.*

拆分后,每个流文件就是单个版本的API数据:

{
  "resourceName": "category1",
  "put": null,
  "delete": null,
  "post": null
}

同样,NiFi会添加split.key属性,值就是版本号(比如v1.1.0)。

步骤3:用EvaluateJson提取目标字段

现在可以用EvaluateJson处理器提取你需要的具体数据了,举几个常用配置示例:

场景1:提取分类级别的数据(未拆分版本时)

针对步骤1拆分后的分类流文件,添加以下属性:

  • Property Name: apiName,JsonPath Expression: $.apiName
  • Property Name: allVersions,JsonPath Expression: $.availableVariants.*(会返回所有版本的数组)

场景2:提取单个版本的详细数据(拆分版本后)

针对步骤2拆分后的版本流文件,添加以下属性:

  • Property Name: resourceName,JsonPath Expression: $.resourceName
  • Property Name: putMethod,JsonPath Expression: $.put
  • Property Name: apiVersion,Value: ${split.key}(直接引用SplitJson生成的版本号属性)
  • Property Name: categoryName,Value: ${split.key}(这里的split.key是上一级SplitJson生成的分类名,需要确保属性传递正确)

排查小技巧

如果还是拿不到数据,可以用LogAttribute处理器查看流文件的内容和属性,确认:

  1. SplitJson是否正确拆分了流文件(看content字段)
  2. split.key等自动生成的属性是否存在
  3. JsonPath表达式是否匹配当前流文件的结构(可以用本地或在线JsonPath测试工具先验证表达式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:10:56