Azure逻辑应用中从JSON数组取嵌套对象并在Select动作Map字段传递异常
Azure逻辑应用Select动作动态Map字段异常排查方案
问题场景
在Azure逻辑应用中使用**Select(数据操作)**动作解析JSON,目标是传入SharePoint列表列的动态JSON到Map字段,实现遍历列表并提取指定列数据。
硬编码如下JSON到Map字段时,可正常返回预期结果:
{ "Approval": "@{item()?['Approved']}", "Approved By": "@{item()['Approved_x0020_By']['DisplayName']}", "Beer Product": "@{item()['Coke_x0020_Product']['Value']}" }
但传入Parse_JSON动作输出的动态表达式时,结果不符合预期,需排查原因。
排查与解决步骤
- 核对Parse_JSON输出结构
确保Parse_JSON输出的JSON结构和硬编码格式完全一致:键名需带双引号,表达式需正确包裹在@{}中。若输出存在未转义字符串、嵌套错误,会导致Select无法解析表达式。 - 验证动态内容的实际渲染值
在逻辑应用中添加Compose动作,将Parse_JSON的动态输出传入,运行后查看Compose结果,确认是否和硬编码的JSON文本完全匹配。若存在转义字符(如\"代替")或表达式被错误转义(如@@{item()...}),会导致Select无法识别表达式。 - 确认数据源上下文一致性
硬编码时使用的SharePoint列表item()上下文,需和动态Map使用的数据源上下文保持一致。若动态Map来自其他Parse_JSON输出,其item()上下文与SharePoint列表上下文不匹配,会导致表达式取值失败。 - 调整表达式传入方式
逻辑应用对动态传入的JSON会按文本处理,不会自动解析其中的@{}表达式。硬编码时是直接输入带表达式的JSON,逻辑应用会主动解析;动态传入时,需改用嵌套表达式构建Map对象,而非直接传入Parse_JSON输出。例如:
若需动态定义列,可结合Parse_JSON的输出字段构建对象:select( outputs('SharePoint_Get_items')?['body/value'], createObject( 'Approval', item()?['Approved'], 'Approved By', item()['Approved_x0020_By']['DisplayName'], 'Beer Product', item()['Coke_x0020_Product']['Value'] ) )select( outputs('SharePoint_Get_items')?['body/value'], createObject( outputs('Parse_JSON')?['body/ApprovalKey'], item()?[outputs('Parse_JSON')?['body/ApprovalField']], outputs('Parse_JSON')?['body/ApprovedByKey'], item()[outputs('Parse_JSON')?['body/ApprovedByField']]['DisplayName'] ) )
内容的提问来源于stack exchange,提问作者G KAMESWAR RAO
相关产品推荐
相关产品推荐

