Azure Logic Apps从嵌套JSON提取URL并保存至SharePoint问题咨询
步骤1:解析输入JSON
先用Parse JSON动作处理输入的JSON字符串:
- 输入内容:选择你的JSON输入源(比如触发动作的输出)
- 点击
Generate from sample,粘贴完整示例JSON自动生成Schema。这一步能让Logic App正确识别嵌套属性,避免后续引用错误。
步骤2:遍历Data下的所有键值对
添加For each循环,循环内容设置为:
@body('Parse_JSON')?['data']
该循环会遍历data属性下的每一组键值对。
步骤3:筛选含foto/photo的图片对象
在For each内添加Condition动作,判断当前键是否为图片对象:
- 条件表达式:
@contains(toLower(items('For_each')?['key']), 'foto') or contains(toLower(items('For_each')?['key']), 'photo')
(转小写是为了兼容大小写不同的命名,比如Photo/FOTO)
步骤4:处理数组/单个对象的图片集合
在Condition的True分支中,先判断当前值是数组还是单个对象:
- 添加
Condition,表达式:
@isArray(items('For_each')?['value'])
- 如果是数组(True分支):添加新的
For each循环,循环内容为@items('For_each')?['value'],遍历数组中的每个图片对象。 - 如果是单个对象(False分支):用
@createArray(items('For_each')?['value'])将其包装为单元素数组,再进入For each循环,统一后续处理逻辑。
步骤5:排除描述字段,提取图片信息
在处理图片对象的For each内,添加Filter array动作:
- 输入内容:
@items('For_each_1')(对应外层循环的当前图片对象) - 筛选条件:
@not(startsWith(toLower(items('Filter_array')?['key']), 'photo_description_'))
这个动作会过滤掉所有以photo_description_开头的描述字段,只保留包含url/fileName的图片信息子对象。
步骤6:下载图片并保存到SharePoint
在Filter array的输出上添加For each循环,遍历筛选后的图片信息对象:
- 添加
HTTP动作:- 方法:
GET - URL:
@items('For_each_2')?['value']?['url'] - 开启
Follow redirects(防止图片URL是跳转链接) - 若图片需要授权,配置对应的认证方式(比如OAuth 2.0)
- 方法:
- 添加
Create file动作(SharePoint连接器):- 站点地址:选择目标SharePoint站点
- 文件夹路径:指定保存图片的文件夹
- 文件名称:
@items('For_each_2')?['value']?['fileName'] - 文件内容:
@body('HTTP')
常见问题排查(针对items()['fileName']报错)
- 检查属性路径:确保
fileName属性的层级正确,比如如果图片信息子对象是Filter array输出的value,就用@items('For_each_2')?['value']?['fileName'],而非直接items()['fileName'] - 空引用防护:用
?运算符避免空值报错,比如@items('For_each_2')?['value']?['fileName'],如果属性不存在会返回空而非报错 - 验证Schema:确保
Parse JSON的Schema包含fileName字段,否则Logic App无法识别该属性 - 查看循环输出:在Logic App运行历史中查看
Filter array的输出,确认每个子对象确实包含fileName属性
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

