NiFi中ExecuteScript输出[object Object],无法显示完整API响应求助
问题原因
你看到[object Object]是因为NiFi的FlowFile属性仅支持存储字符串类型,而你直接将JSON解析后的对象(reasonId)存入myAttr,对象会被自动调用toString()方法,最终输出默认结果[object Object]。
解决方案1:修改ExecuteScript代码
将解析后的JSON对象转成字符串再存入属性,同时修正代码逻辑问题:
var reasonId; try { // 解析SubReason1属性的JSON字符串 reasonId = JSON.parse(flowFile.getAttribute('SubReason1')); if (flowFile != null) { if (reasonId !== undefined && reasonId !== null) { // 将对象转为JSON字符串后存入属性 flowFile = session.putAttribute(flowFile, 'myAttr', JSON.stringify(reasonId)); session.transfer(flowFile, REL_SUCCESS); } else { session.transfer(flowFile, REL_FAILURE); } } } catch(e) { // 捕获JSON解析失败的异常,转入失败关系 session.transfer(flowFile, REL_FAILURE); }
解决方案2:使用EvaluateJsonPath处理器
情况1:API响应在FlowFile内容中
- 添加EvaluateJsonPath处理器,打开配置界面
- 在Destination下拉框选择
flowfile-attribute - 在Attributes to Set区域点击+号:
- Attribute Name填写
myAttr - Json Path Expression填写
$(表示匹配整个JSON内容)
- Attribute Name填写
- 保存配置,将上游输出API响应的处理器连接到该处理器的
success关系
情况2:API响应在属性(如SubReason1)中
先把属性内容转成FlowFile内容,再用EvaluateJsonPath处理:
- 添加ReplaceText处理器,配置:
- Search Value填写
.* - Replacement Value填写
${SubReason1} - Replacement Strategy选择
Replace entire text
- Search Value填写
- 将ReplaceText的
success关系连接到EvaluateJsonPath,再按情况1的步骤配置EvaluateJsonPath即可。
内容的提问来源于stack exchange,提问作者Destiel
相关产品推荐
相关产品推荐

