如何使用Azure Logic App将API返回JSON映射为Microsoft Graph tiIndicator结构
Azure Logic App JSON结构映射最优实现方案
方案1:零代码原生操作实现(推荐简单场景)
直接用Logic App内置的标准操作完成转换,无需额外代码,维护成本最低:
- 首先处理外部API返回结果,使用「解析JSON」操作校验返回结构,提取
data字段的IOC数组 - 新增「For each」循环,遍历
data数组的每一个IOC条目 - 在循环内添加「组合(Compose)」操作,直接构造符合Microsoft Graph tiIndicator规范的目标对象,按需完成字段映射,示例映射规则如下:
{ "expirationDateTime": "@{addDays(utcNow(), 30)}", "externalId": "@{items('For_each')?['id']}", "ingestedDateTime": "@{utcNow()}", "isActive": true, "killChain": ["@{items('For_each')?['threat_type_desc']}"] // 其余无对应源数据的字段可留空或省略 } - 最后将「组合」操作的输出作为输入,调用Azure表存储的「插入实体」操作即可完成写入,可将
threat_type作为分区键、源数据id作为行键避免数据重复。
方案2:内置JS脚本实现(推荐复杂映射场景)
如果存在多字段分支判断、批量转换等复杂逻辑,用内置的JavaScript代码操作性能更高:
- 直接提取API返回的
data数组传入「执行JavaScript代码」操作,示例代码如下:const iocList = workflowContext.actions.调用_API.outputs.body.data; return iocList.map(item => { const target = { externalId: item.id, killChain: [item.threat_type_desc], ingestedDateTime: new Date().toISOString(), expirationDateTime: new Date(Date.now() + 30*24*60*60*1000).toISOString(), isActive: true }; // 可根据ioc_type动态填充对应字段 if(item.ioc_type === 'filehash') { target.fileHashValue = item.ioc; target.fileHashType = item.threat_type; } return target; }); - 脚本返回的转换后数组可直接批量写入表存储,无需逐行循环,处理效率更高。
内容的提问来源于stack exchange,提问作者my name jeff
相关产品推荐
相关产品推荐

