在Logic Apps中解析ADF传来的JSON字符串数组以生成状态邮件
解决Logic Apps解析ADF管道runOutput JSON字符串数组并生成状态邮件的问题
问题根源
ADF传递的runOutput是JSON字符串组成的数组,而非直接的JSON对象数组。直接尝试从字符串中选择ClientFeedID、ClientName等属性时,会触发「无法从字符串类型值选择属性」的错误——因为字符串本身没有这些属性,必须先将每个字符串转换为可操作的JSON对象。
分步解决方案
1. 解析runOutput数组结构
先用「Parse JSON」动作解析ADF传来的runOutput,明确其为字符串数组:
- 输入:选择ADF触发传递的
runOutput字段 - Schema(可通过「Generate from sample payload」自动生成,或手动输入):
{ "type": "array", "items": { "type": "string" } }
2. 遍历并转换每个JSON字符串
添加「Apply to each」动作,遍历「Parse JSON」输出的Body(即数组中的每个字符串元素):
- 在循环内部添加「Compose」动作,输入表达式:
json(item())
这个表达式会将字符串格式的JSON转换为Logic Apps可识别的JSON对象。
3. 提取字段并收集到数组变量
- 先初始化一个数组类型的变量(比如命名为
PipelineStatusList) - 在「Apply to each」的「Compose」动作之后,添加「Append to array variable」动作,将提取的字段封装为对象存入数组:
输入内容示例:
{ "客户端FeedID": "@outputs('Compose')?['ClientFeedID']", "客户端名称": "@outputs('Compose')?['ClientName']", "管道状态": "@outputs('Compose')?['Status']", "运行开始时间": "@outputs('Compose')?['RunStartTime']" }
注:字段名可自定义,?用于避免字段不存在时触发错误。
4. 生成HTML表格并发送邮件
- 添加「Create HTML table」动作,输入选择变量
PipelineStatusList,可选择自动生成列或手动指定列映射 - 添加「Send email(V2)」动作,在邮件正文中嵌入HTML表格,示例正文:
<p>您好,以下是ADF管道最新运行状态:</p> @{body('Create_HTML_table')}
关键注意点
- 必须先通过
json()表达式将字符串转为JSON对象,才能提取内部属性 - 使用数组变量收集所有条目后再生成表格,避免循环内重复生成表格导致格式混乱
- 若
runOutput中存在空字符串或无效JSON,可添加条件判断(如contains(item(), 'ClientFeedID'))过滤无效条目
内容的提问来源于stack exchange,提问作者JustBob
相关产品推荐
相关产品推荐

