如何用concat/replace函数解决Azure Logic Apps JSON参数左括号编码问题
Azure Logic Apps JSON参数左括号编码及引号冲突解决方法
问题背景
Azure Logic Apps会自动将JSON查询参数名称中的左括号[编码为~2,例如原始参数名parameters[0][field]会被转换为parameters~20]~2field]。手动用concat和replace拼接参数名时,容易出现单双引号兼容问题。
可行解决方法
方法1:使用表达式模式直接生成编码键名
避开直接在JSON视图中编写字符串,切换到表达式模式(点击输入框旁的fx按钮),通过replace函数直接生成编码后的键名:
- 固定索引的键名示例:
执行后会生成replace('parameters[0][field]', '[', '~2')parameters~20]~2field] - 动态索引的键名示例(结合循环或变量索引):
其中replace(concat('parameters[', string(variables('currentIndex')), '][field]'), '[', '~2')variables('currentIndex')为存储动态索引的变量,string()用于将数字索引转为字符串类型。
值部分直接用表达式引用变量或其他输出,无需额外加引号,例如:
variables('dateStart')
方法2:通过对象变量构建参数集合
用setProperty函数动态构建参数对象,完全避免JSON引号冲突:
- 创建一个对象类型的变量(例如
queryParams),初始值设为{} - 依次添加参数属性,示例表达式:
setProperty(variables('queryParams'), replace('parameters[0][field]', '[', '~2'), 'date_start')setProperty(variables('queryParams'), replace('parameters[0][value]', '[', '~2'), variables('dateStart')) - 最终在需要使用参数的地方,直接引用
variables('queryParams')即可,Logic Apps会自动处理对象到JSON的转换。
注意事项
- 所有表达式需在Logic Apps的表达式编辑模式下编写,不要直接在JSON视图中嵌套字符串,避免引号转义错误。
- 若涉及URL编码的标准场景,也可使用
uriComponent('[')获取标准编码%5B,但需根据API实际要求选择对应编码方式。
内容的提问来源于stack exchange,提问作者Bob Canavan
相关产品推荐
相关产品推荐

