在 Power Automate Flow 中以字符串形式发送内容时保留 JSON 格式

问题描述 投票:0回答:1

我的主要目标是使用 Power Automate Flow 更新 Azure DevOps 存储库中的 JSON 文件。

读取 JSON 文件、编辑内容并将其写回都可以工作,但 JSON 格式在流程期间会丢失。

我的限制是 Azure DevOps API 期望 JSON 文件内容为字符串。当将 Flow 中的对象转换为字符串时,JSON 格式会丢失。

在 Azure DevOps 网页中本地执行此过程,我可以看到 DevOps 本身正在添加“ " 与 "" 和 "" 以保持格式。

example from devops

解决方案可能是在流程中执行相同的操作,但我似乎找不到创建相同格式的好方法。

我尝试了多种使用替换的方法来获得相同的格式,但格式最终并不相同。

replace(replace(replace(replace(string(variables('jsonobject')), ',"', ',\n  "'), '{', '{\n  '), '}', '\n}'), '},', '},\n')

(在实际的 Compose 中 实际上是编辑器中的换行符,而不是字符串“ “ 供参考) example Flow with replace

有办法实现这个吗?

power-automate
1个回答
0
投票

您可以在高级数据操作连接器中使用C#脚本执行操作,以便通过缩进等来格式化JSON。

它非常实惠,但并不适合所有人。 我对这个连接器发誓。

https://statesolutions.com.au/c-script-execute/

https://statesolutions.com.au/pricing/

Flow

初始化数据

这是一个作为真正对象的 JSON 对象,即不是字符串。 这是我测试的数据,以缩小的形式显示......

{"Property1":"Value 1","Property2":"Value 2","Property3":[1,2,3,4,5],"Property4":{"Property4.1":"Value 4.1","Property4.2":"Value 4.2","Property4.3":"Value 4.3"}}

...这里的假设是这是您编辑后正在使用的数据。

C# 脚本执行

这就是奇迹发生的地方,而且非常简单。

C# Script Execute

参数是...

脚本=

return JsonConvert.SerializeObject(parameters.dataToFormat, Newtonsoft.Json.Formatting.Indented);

参数=

{
  "dataToFormat": @{variables('Data')}
}

撰写结果

这只是简单地取出结果并将其存储在

Compose
语句中。

body('C#_Script_Execute')['returnValue']

这就是结果,一个格式化且缩进的结构......

"{\r\n  \"Property1\": \"Value 1\",\r\n  \"Property2\": \"Value 2\",\r\n  \"Property3\": [\r\n    1,\r\n    2,\r\n    3,\r\n    4,\r\n    5\r\n  ],\r\n  \"Property4\": {\r\n    \"Property4.1\": \"Value 4.1\",\r\n    \"Property4.2\": \"Value 4.2\",\r\n    \"Property4.3\": \"Value 4.3\"\r\n  }\r\n}"
© www.soinside.com 2019 - 2024. All rights reserved.