我的主要目标是使用 Power Automate Flow 更新 Azure DevOps 存储库中的 JSON 文件。
读取 JSON 文件、编辑内容并将其写回都可以工作,但 JSON 格式在流程期间会丢失。
我的限制是 Azure DevOps API 期望 JSON 文件内容为字符串。当将 Flow 中的对象转换为字符串时,JSON 格式会丢失。
在 Azure DevOps 网页中本地执行此过程,我可以看到 DevOps 本身正在添加“ " 与 "" 和 "" 以保持格式。
解决方案可能是在流程中执行相同的操作,但我似乎找不到创建相同格式的好方法。
我尝试了多种使用替换的方法来获得相同的格式,但格式最终并不相同。
replace(replace(replace(replace(string(variables('jsonobject')), ',"', ',\n "'), '{', '{\n '), '}', '\n}'), '},', '},\n')
(在实际的 Compose 中 实际上是编辑器中的换行符,而不是字符串“ “ 供参考)
有办法实现这个吗?
您可以在高级数据操作连接器中使用C#脚本执行操作,以便通过缩进等来格式化JSON。
它非常实惠,但并不适合所有人。 我对这个连接器发誓。
https://statesolutions.com.au/c-script-execute/
https://statesolutions.com.au/pricing/
这是一个作为真正对象的 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"}}
...这里的假设是这是您编辑后正在使用的数据。
这就是奇迹发生的地方,而且非常简单。
参数是...
脚本=
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}"