Apache NiFi:如何从属性存储的JSON响应中提取认证令牌?
Apache NiFi 提取属性中JSON字段的解决方案
针对你遇到的问题,这里提供几个可行的解决思路:
方法1:使用ExecuteScript处理器解析属性中的JSON
ExecuteScript支持直接操作流文件属性,能轻松解析属性内的JSON内容并提取目标字段。以Groovy脚本为例:
- 添加ExecuteScript处理器,选择Groovy作为脚本语言
- 替换默认脚本为以下代码:
import groovy.json.JsonSlurper def flowFile = session.get() if (!flowFile) return def tokenResponse = flowFile.getAttribute("TokenResponse") if (tokenResponse) { def json = new JsonSlurper().parseText(tokenResponse) flowFile = session.putAttribute(flowFile, "userId", json.data.userId) flowFile = session.putAttribute(flowFile, "authToken", json.data.authToken) } session.transfer(flowFile, REL_SUCCESS)
- 配置完成后,处理器会从
TokenResponse属性中解析出userId和authToken,并保存为新的流文件属性,后续第二个InvokeHTTP直接使用${userId}和${authToken}即可。
方法2:将属性内容转存为流文件内容后用EvaluateJSONPath处理
如果更习惯用EvaluateJSONPath,可以先把属性里的JSON转成流文件内容:
- 添加ReplaceText处理器,设置
Replacement Value为${TokenResponse},Replacement Strategy选择Replace Entire Text,这样流文件内容就变成了TokenResponse属性的JSON字符串 - 添加EvaluateJSONPath处理器,设置
Destination为flowfile-attribute,然后添加两个属性:userId:$.data.userIdauthToken:$.data.authToken
- 处理完成后,流文件就会带上提取出的
userId和authToken属性,可直接用于后续InvokeHTTP请求。
注意:如果原始流文件内容需要保留,可以先把原始内容存到临时属性,处理完再替换回来。
方法3:使用JoltTransformJSON处理器(进阶)
如果需要更复杂的JSON转换,也可以用JoltTransformJSON:
- 先通过ReplaceText把TokenResponse属性转成流文件内容
- 添加JoltTransformJSON处理器,设置
Jolt Specification为:
{ "operation": "shift", "spec": { "data": { "userId": "userId", "authToken": "authToken" } } }
- 再用EvaluateJSONPath把转换后的JSON字段提取为属性,或者直接在后续处理器中引用。
内容的提问来源于stack exchange,提问作者BM100
相关产品推荐
相关产品推荐

