Azure Data Factory设置变量If条件报错:无分页场景属性选取失败
解决Azure Data Factory分页URL提取的类型不兼容问题
问题场景
将API响应以JSON格式存储到Blob存储,通过Lookup Activity读取JSON后设置变量提取下一页分页URL,用于Until Activity遍历所有页面。当前逻辑在存在分页时(link为数组)正常运行,但无分页时link为单个对象,执行表达式时报错:
expression cannot be evaluated because property 1 cannot be selected object. properties can only be selected by names
原使用的表达式:
@if( equals (activity('LookupActivity').output.firstRow['feed']['link'][1]['@rel'], 'next'), activity('LookupActivity').output.firstRow['feed']['link'][1]['@href'], '' )
问题原因
无分页时,JSON中的link是单个对象而非数组,直接使用数字索引[1]访问对象属性会触发错误——对象仅支持通过属性名访问,不支持数字索引。
解决方案
修改表达式,先判断link的类型(数组/对象),再分情况处理:
@if( isArray(activity('LookupActivity').output.firstRow['feed']['link']), # 当link是数组时,沿用原有逻辑判断索引1的元素是否为next页 if( equals(activity('LookupActivity').output.firstRow['feed']['link'][1]['@rel'], 'next'), activity('LookupActivity').output.firstRow['feed']['link'][1]['@href'], '' ), # 当link是对象时,直接判断当前对象是否为next页(无分页时通常为self,会返回空) if( equals(activity('LookupActivity').output.firstRow['feed']['link']['@rel'], 'next'), activity('LookupActivity').output.firstRow['feed']['link']['@href'], '' ) )
逻辑说明
- 用
isArray函数判断link是否为数组 - 若是数组,继续使用原逻辑检查索引1的元素
@rel是否为next,是则提取@href,否则返回空 - 若不是数组(即单个对象),直接检查该对象的
@rel是否为next,是则提取@href,否则返回空
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

