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

在Apache NiFi中提取JSON数组内numeroNota值的方法

如何从指定JSON中提取numeroNota值(使用EvaluateJsonPath或其他处理器)

目标JSON结构

{
  "documentos": [
    {
      "valorNota": 229.2,
      "tipoDocumento": "PRE_NOTA_FISCAL",
      "cnpjEmissorNota": "02130525000177",
      "cnpjRemetente": "02130525000177",
      "cnpjUnidade": "02130525000177",
      "cnpjDestinatario": "14586674000124",
      "valorFreteRealizadoNota": 0,
      "serie": "1",
      "valorFreteCalculadoNota": 1000,
      "tipoOperacao": "SAIDA",
      "dataEmissao": "2022-12-05 11:03:00",
      "numeroNota": 744659
    }
  ],
  "dataEmissaoConhecimento": "2022-12-05 11:03:00.0",
  "localizacaoDestinoConhecimento": 3002171,
  "localizacaoOrigemConhecimento": 3001956,
  "cepOrigemConhecimento": 44079006,
  "cepDestinoConhecimento": 48880000,
  "valorFreteRealizadoConhecimento": 0,
  "oidConhecimento": 10802880097,
  "valorFreteCalculadoConhecimento": 1000
}

方法1:使用EvaluateJsonPath处理器

这是最直接的方式,步骤如下:

  1. 将EvaluateJsonPath处理器添加到NiFi流程中
  2. 配置核心参数:
    • Destination:选择值的存放位置,可选flowfile attribute(存为流文件属性)或flowfile content(替换流文件内容)
    • JsonPath Expression:输入对应表达式:
      • 提取数组中第一个元素的numeroNota:$.documentos[0].numeroNota
      • 若documentos有多个元素,提取所有numeroNota组成数组:$.documentos[*].numeroNota
  3. 运行流程即可得到目标值

方法2:使用Jolt TransformJSON处理器

适合需要灵活转换JSON结构的场景:

  1. 添加Jolt TransformJSON处理器
  2. 在Jolt Specification中输入规则(提取第一个numeroNota):
[
  {
    "operation": "shift",
    "spec": {
      "documentos": {
        "0": {
          "numeroNota": "numeroNota"
        }
      }
    }
  }
]

若要提取所有documentos中的numeroNota,将规则中的"0"改为"*"即可


方法3:使用ExecuteScript处理器(Groovy脚本)

实现自定义提取逻辑:

  1. 添加ExecuteScript处理器,选择脚本语言为Groovy
  2. 输入以下脚本:
import groovy.json.JsonSlurper

def flowFile = session.get()
if (!flowFile) return

def jsonContent = flowFile.read().getText()
def jsonObj = new JsonSlurper().parseText(jsonContent)

// 提取第一个documento的numeroNota,存为流文件属性
def targetValue = jsonObj.documentos[0].numeroNota
flowFile.setAttribute('extracted_numeroNota', targetValue.toString())

session.transfer(flowFile, REL_SUCCESS)

运行后,流文件会新增extracted_numeroNota属性,值为目标数字


内容的提问来源于stack exchange,提问作者Rodrigo Hajime Himauari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:25:56