我想让你对一些事情动脑筋。因此,在Azure数据工厂中,我正在运行一组活动,这些活动在运行结束时会生成一个json片段
{"name":"myName", "email":"email@somewhere.com", .. <more elements> }
这组活动发生在一个循环- Loop Until活动中。我的目标是得到一个如下所示的最终JSON对象:
"profiles":[
{"name":"myName", "email":"email@somewhere.com", .. <more elements> },
{"name":"myName", "email":"email@somewhere.com", .. <more elements> },
{"name":"myName", "email":"email@somewhere.com", .. <more elements> },
...
{"name":"myName", "email":"email@somewhere.com", .. <more elements> }
]
这是所有个体的连接。
客观地说,每一个单独的条目都是来自一个API的分页数据--所有这些都构成了最终的响应,我无法控制有多少。
我了解如何使用2个变量连接单个项目
jsonTemp = @concat(finalJson, individualResponse)
finalJson = jsonTemp
但是,我不知道如何使这一切下的单一屋顶“配置文件”之后。
2条答案
按热度按时间avkwfej41#
我同意**@Anupam Chand**,我遵循相同的流程,但有不同的第二步。
您提到过对象数据来自API页面,要结束until循环,您必须为给予一个关于页面数量(迭代次数)的条件。
这是我的渠道:
首先我初始化了一个计数器,并使用该计数器计数每个网页的URL和until条件,以满足一定数量的页面。由于ADF不支持自引用变量,我使用了另一个临时变量来增加计数器。
为了存储来自Web活动的每个迭代的对象,我在pipeline中创建了一个数组变量。
在ForEach内部,使用append variable activity将每个对象追加到数组中,如下所示。
对于我的示例网络活动的动态内容将是
@activity('Data from REST').output.data[0]
。对你来说,它会像@activity('Web1').output
。改变它根据您的要求。这是我的管道JSON:
生成数组变量:
你可以通过变量名访问这个数组。如果你希望输出和你的一样,你可以使用下面的动态内容。
@json(concat('{','"profile":',string(variables('res_show')),'}')))
但是,如果要将其存储在变量中,则必须将其 Package 在
@string()
中,因为目前ADF变量仅支持int、string和array类型。jslywgbw2#
所以这是一个有点笨拙的方法,很高兴听到一个更好的解决方案。我假设你已经把所有的结果存储在一个数组变量中(让我们称之为A)。
1.第一步是找出数组中元素的个数,你可以使用length(..)函数来完成。
1.然后你进入一个循环,迭代一个计数器变量,并连接数组的每个元素,确保在每个元素之间添加一个','。你必须确保你没有在最后一个元素后面添加','(你需要使用一个IF条件来检查你的计数器是否达到了数组的长度。在这个条件的末尾,你应该有一个这样的字符串变量。
{“姓名”:“我的姓名”,“电子邮件”:“email@somewhere.com“},{“姓名”:“我的姓名”,“电子邮件”:“电子邮件@某个地方. com”},{“姓名”:“我的姓名”,“电子邮件”:“电子邮件@某个地方. com”},{“姓名”:“我的姓名”,“电子邮件”:“电子邮件@某个地方. com”}
1.现在你需要做的就是这个表达式当你把响应推到任何地方的时候。
@json(concat('{“配置文件”:[',<your_string_variable_here>,']}'))