Power Apps如何将标准JSON数组传递给Power Automate Flow?
背景
我目前正在开发一款基于Power Apps的专用搜索引擎前端,需要通过Power Automate Flow将字符串数组传递给后端服务以指定筛选条件。
Flow格式要求
Flow接收的输入是一个JSON对象,会直接透传给后端服务,格式示例如下:
{ "service": "string", "types": ["A", "B", "C", ...] }
遇到的问题
Power Apps不支持直接创建原生数组,使用JSON()函数序列化对象时,会自动给单值数组元素包裹Value字段,得到的输出不符合要求,示例如下:
{ "service": "string", "types": [{"Value" : "A"}, {"Value" : "B"}, {"Value" : "C"}, ...] }
已尝试的无效方案
Collect(arrayTypes; ["A", "B", "C", ...])ClearCollect(arrayTypes; ["A", "B", "C", ...])Set(arrayTypes; ["A", "B", "C", ...])Set(arrayTypes; JSON(["A", "B", "C", ...]))Set(arrayTypes; JSON(["A", "B", "C", ...].Value))JSON(ForAll(arrayTypes.Value; ThisRecord.Value))
之前考虑将数组转为逗号分隔字符串传递再在Flow中重构,但需要大幅修改现有Flow逻辑(多数组传递场景下改造成本高),希望尽量不改动现有Flow的核心逻辑。
可行解决方案
下面给出两种适配方案,均无需大规模修改现有逻辑:
方案1:Power Apps端直接生成标准JSON(无需修改Flow)
通过字符串替换消除JSON()函数自动添加的冗余字段,步骤如下:
- 先正常生成携带
Value字段的原始JSON串:
Set(RawJson, JSON({ service: "你的业务服务名", types: arrayTypes }))
- 两层替换清除冗余结构:
Set(StandardJson, Substitute( Substitute(RawJson, """Value"":", ""), "},{", "," ) )
注意:该方案适用筛选值不含
},{"、"Value":特殊字符的场景,无特殊字符时输出完全符合JSON规范,可直接传给Flow透传后端。
方案2:Flow端轻量处理(更稳妥,无特殊字符兼容问题)
无需修改Flow核心透传逻辑,仅需在接收Power Apps参数后新增一步轻量转换:
- 添加「数据操作」分类下的
Select操作 - 「输入」选择Power Apps传递过来的
types数组参数 - 切换映射的「文本模式」,输入表达式
item()?['Value'] - 后续透传给后端的逻辑中,直接使用
Select操作的输出即可,完全兼容原有逻辑
两种方案均可根据你的业务场景选择,均不需要将数组转为逗号分隔字符串再重构。
内容的提问来源于stack exchange,提问作者Dremor
相关产品推荐
相关产品推荐

