Azure数据工厂附加到Json

juzqafwq  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(149)

我想让你对一些事情动脑筋。因此,在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

但是,我不知道如何使这一切下的单一屋顶“配置文件”之后。

avkwfej4

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:

{
"name": "pipeline3",
"properties": {
    "activities": [
        {
            "name": "Until1",
            "type": "Until",
            "dependsOn": [
                {
                    "activity": "Counter intialization",
                    "dependencyConditions": [
                        "Succeeded"
                    ]
                }
            ],
            "userProperties": [],
            "typeProperties": {
                "expression": {
                    "value": "@equals('3', variables('counter'))",
                    "type": "Expression"
                },
                "activities": [
                    {
                        "name": "Data from REST",
                        "type": "WebActivity",
                        "dependsOn": [
                            {
                                "activity": "counter in temp variable",
                                "dependencyConditions": [
                                    "Succeeded"
                                ]
                            }
                        ],
                        "policy": {
                            "timeout": "0.12:00:00",
                            "retry": 0,
                            "retryIntervalInSeconds": 30,
                            "secureOutput": false,
                            "secureInput": false
                        },
                        "userProperties": [],
                        "typeProperties": {
                            "url": {
                                "value": "https://reqres.in/api/users?page=@{variables('counter')}",
                                "type": "Expression"
                            },
                            "method": "GET"
                        }
                    },
                    {
                        "name": "counter in temp variable",
                        "type": "SetVariable",
                        "dependsOn": [],
                        "userProperties": [],
                        "typeProperties": {
                            "variableName": "tempCounter",
                            "value": {
                                "value": "@variables('counter')",
                                "type": "Expression"
                            }
                        }
                    },
                    {
                        "name": "Counter increment using temp",
                        "type": "SetVariable",
                        "dependsOn": [
                            {
                                "activity": "Data from REST",
                                "dependencyConditions": [
                                    "Succeeded"
                                ]
                            }
                        ],
                        "userProperties": [],
                        "typeProperties": {
                            "variableName": "counter",
                            "value": {
                                "value": "@string(add(int(variables('tempCounter')),1))",
                                "type": "Expression"
                            }
                        }
                    },
                    {
                        "name": "Append web output to array",
                        "type": "AppendVariable",
                        "dependsOn": [
                            {
                                "activity": "Counter increment using temp",
                                "dependencyConditions": [
                                    "Succeeded"
                                ]
                            }
                        ],
                        "userProperties": [],
                        "typeProperties": {
                            "variableName": "arr",
                            "value": {
                                "value": "@activity('Data from REST').output.data[0]",
                                "type": "Expression"
                            }
                        }
                    }
                ],
                "timeout": "0.12:00:00"
            }
        },
        {
            "name": "Counter intialization",
            "type": "SetVariable",
            "dependsOn": [],
            "userProperties": [],
            "typeProperties": {
                "variableName": "counter",
                "value": {
                    "value": "@string('1')",
                    "type": "Expression"
                }
            }
        },
        {
            "name": "To show res array",
            "type": "SetVariable",
            "dependsOn": [
                {
                    "activity": "Until1",
                    "dependencyConditions": [
                        "Succeeded"
                    ]
                }
            ],
            "userProperties": [],
            "typeProperties": {
                "variableName": "res_show",
                "value": {
                    "value": "@variables('arr')",
                    "type": "Expression"
                }
            }
        }
    ],
    "variables": {
        "arr": {
            "type": "Array"
        },
        "counter": {
            "type": "String"
        },
        "tempCounter": {
            "type": "String"
        },
        "res_show": {
            "type": "Array"
        },
        "arr_string": {
            "type": "String"
        }
    },
    "annotations": []
}
}

生成数组变量:

你可以通过变量名访问这个数组。如果你希望输出和你的一样,你可以使用下面的动态内容。
@json(concat('{','"profile":',string(variables('res_show')),'}')))
但是,如果要将其存储在变量中,则必须将其 Package 在@string()中,因为目前ADF变量仅支持int、string和array类型。

jslywgbw

jslywgbw2#

所以这是一个有点笨拙的方法,很高兴听到一个更好的解决方案。我假设你已经把所有的结果存储在一个数组变量中(让我们称之为A)。
1.第一步是找出数组中元素的个数,你可以使用length(..)函数来完成。
1.然后你进入一个循环,迭代一个计数器变量,并连接数组的每个元素,确保在每个元素之间添加一个','。你必须确保你没有在最后一个元素后面添加','(你需要使用一个IF条件来检查你的计数器是否达到了数组的长度。在这个条件的末尾,你应该有一个这样的字符串变量。
{“姓名”:“我的姓名”,“电子邮件”:“email@somewhere.com“},{“姓名”:“我的姓名”,“电子邮件”:“电子邮件@某个地方. com”},{“姓名”:“我的姓名”,“电子邮件”:“电子邮件@某个地方. com”},{“姓名”:“我的姓名”,“电子邮件”:“电子邮件@某个地方. com”}
1.现在你需要做的就是这个表达式当你把响应推到任何地方的时候。
@json(concat('{“配置文件”:[',<your_string_variable_here>,']}'))

相关问题