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

基于JSON属性对单个FlowFile中的JSON数组排序:Apache NiFi

嘿,完全不用折腾自定义处理器!NiFi自带的组件就能轻松搞定这个需求,我给你分享两种靠谱的方案,按需选择:

方案1:用JoltTransformJSON无代码实现(推荐)

Jolt是NiFi内置的JSON转换工具,专门处理这类JSON结构调整的需求,完全不用写代码。

配置步骤:

  1. 把JoltTransformJSON处理器拖到画布上,连接你的数据源FlowFile。
  2. 打开处理器配置面板,找到Jolt Specification属性,填入对应的排序规则:
    • 按createdDate升序排序的Jolt规则:
      [
        {
          "operation": "sort",
          "spec": {
            "*": {
              "createdDate": "asc"
            }
          }
        }
      ]
      
    • 按createdDate降序排序的话,把上面的"asc"改成"desc"就行。
  3. 其他属性保持默认(Input JSON Path Expression留空表示处理整个FlowFile的JSON内容),保存配置后启动处理器即可。
方案2:用ExecuteScript写轻量Groovy脚本(更灵活)

如果你的JSON结构更复杂,或者需要对日期做更精确的解析(比如非标准格式),用Groovy脚本会更灵活。

配置步骤:

  1. 添加ExecuteScript处理器到画布,连接数据源。
  2. 配置处理器:
    • Script Language选择Groovy
    • Script Body填入下面的脚本,根据需要切换升序/降序:
      import groovy.json.JsonSlurper
      import groovy.json.JsonBuilder
      import java.text.SimpleDateFormat
      
      def flowFile = session.get()
      if (!flowFile) return
      
      flowFile = session.write(flowFile, { inputStream, outputStream ->
          def slurper = new JsonSlurper()
          def jsonArray = slurper.parse(inputStream)
          
          // 👇 选择排序方式:二选一
          // 1. 升序排序(针对yyyy-MM-dd HH:mm:ss格式,字符串排序和日期逻辑一致)
          def sortedArray = jsonArray.sort { it.createdDate }
          // 2. 降序排序
          // def sortedArray = jsonArray.sort { a, b -> b.createdDate <=> a.createdDate }
      
          // 如果日期格式不是可字符串排序的类型,转成Date对象再排序(示例)
          // def sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
          // def sortedArray = jsonArray.sort { sdf.parse(it.createdDate) }
      
          def builder = new JsonBuilder(sortedArray)
          outputStream.write(builder.toPrettyString().getBytes('UTF-8'))
      } as StreamCallback)
      
      session.transfer(flowFile, REL_SUCCESS)
      
  3. 保存配置后启动处理器即可。
注意事项
  • 如果你的JSON数组不是直接在根节点,而是嵌套在某个字段里(比如{"users": [你的数组]}),需要调整配置:
    • Jolt方案:把Input JSON Path Expression设为$.users,Output JSON Path Expression也设为$.users
    • 脚本方案:把def jsonArray = slurper.parse(inputStream)改成def jsonArray = slurper.parse(inputStream).users
  • 日期格式如果不是yyyy-MM-dd HH:mm:ss这种字典序和日期序一致的格式,一定要用脚本里的SimpleDateFormat转成Date对象再排序,避免排序结果错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:20:40