如何从嵌套对象生成可遍历的fields数组?
将JSON对象的键值对转换为可遍历的数组元素
你需要把fields对象中的每一组键值对拆分成数组的独立元素,而非将整个fields对象作为数组的单个元素。以下分两种常用场景给出解决方案:
场景1:使用Power Automate实现
不要直接用createArray()包裹整个fields对象,而是通过Select动作拆分键值对:
- 定位到目标
fields对象,比如从你的JSON数据源中取路径为body.value[0].fields的内容,将其作为Select动作的输入。 - 切换到Select动作的高级模式,在映射区域输入以下表达式:
@json(concat('{"', item()?['Key'], '": ', string(item()?['Value']), '}')) - 执行后,Select动作会输出符合预期的数组——每个元素都是
fields中的一组独立键值对。
原理:当把对象作为Select的输入时,Power Automate会自动遍历对象的键值对(每个item()包含Key和Value属性),通过concat和json函数将每一组键值对重新构造成独立JSON对象,最终组成数组。
场景2:使用JavaScript代码实现
如果允许用代码处理(比如Power Automate的「运行JavaScript代码」动作、Node.js环境等),可以直接通过对象遍历快速转换:
// 假设fields是你从JSON中提取的目标对象 const fields = { "System.AreaId": { "oldValue": 233, "newValue": 234 }, // ...其他字段 }; // 将对象键值对转换为数组元素 const resultArray = Object.entries(fields).map(([key, value]) => ({ [key]: value }));
这段代码通过Object.entries()获取对象的所有键值对数组,再用map()将每一组键值对转换为独立对象,最终得到你需要的数组结构。
为什么直接用createArray()不行?
createArray(body.value[0].fields)只会将整个fields对象作为数组的第一个元素放入数组,不会自动拆分对象内部的键值对,这就是你之前得到单元素数组的原因。
内容的提问来源于stack exchange,提问作者GaryAutomate
相关产品推荐
相关产品推荐

