azure 带有变量的数据工厂表达式生成器

oyxsuwqo  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(97)

我使用的是第三方REST API,我将设备的序列号传递给它,它返回一系列值。这个API返回一个JSON,其中一个节点以序列号命名,因此我必须以这种方式来处理它以检索值

activity('Web1').output.root.SERIALXXXXX.values.variousArrays

字符串
如何在表达式生成器中动态更改节点名称?是否有一些“评估”功能,允许建立节点名称?
如果我找不到任何答案,我会把第三方的rest API封装在我自己做的一个azure函数中,以一个更可用和更稳定的结构重建数据,但我想避免每次我被第三方工作卡住时都做这种工作。我搜索了Microsoft Learn,但我甚至不知道如何提出这个问题。
JSon结构如下所示

{
    "historicData": {
        "success": true,
        "params": {
            "value": [
                {
                    "SERIAL123": {
                        "Array1": [
                            0.0,
                           ...
                            0.0
                        ],
                        "Array2": [
                            0,
                           ...
                            0
                        ],
                        "timestamp": [
                            "2023-07-18T00:03:02Z",
                            ...
                            "2023-07-18T02:21:42Z"
                        ]
                    },
                    {
                    "SERIAL456": {
                        "Array1": [
                            0.0,
                           ...
                            0.0
                        ],
                        "Array2": [
                            0,
                            ...
                            0
                        ],
                        "timestamp": [
                            "2023-07-18T00:03:02Z",
                            ...
                            "2023-07-18T02:21:42Z"
                        ]
                    }
                }
            ]
        }
    }
}

sz81bmfz

sz81bmfz1#

我尝试了你的场景,在一个blob中使用了一个JSON示例。

{
    "root":{
        "SERIAL12345":{
            "values":{
                "variousArrays":[
                {
                    "id":"24",
                    "name":"Rakesh"
                },
                {
                    "id":"26",
                    "name":"Laddu"
                }
                ]
            }
        },
        "SERIAL12346":{
            "values":{
                "variousArrays":[
                {
                    "id":"1",
                    "name":"Virat"
                },
                {
                    "id":"2",
                    "name":"Kohli"
                }
                ]
            }
        },
        "SERIAL12347":{
            "values":{
                "variousArrays":[
                {
                    "id":"10",
                    "name":"MS"
                },
                {
                    "id":"16",
                    "name":"Dhoni"
                }
                ]
            }
        }
    }
}

字符串
为了在ADF中获取JSON,我在上面使用了lookup活动。
要访问数组,首先需要获取SERIALXXXXX键的列表。为此,首先我将上面的JSON转换为字符串,并使用下面的表达式在""SERIAL"上使用split,并使用set变量activity存储在数组变量中。

@split(string(activity('Lookup1').output.value[0].root),'"SERIAL')


当您使用Web Activity时,请使用Web Activity表达式@activity('Web1').output.root而不是查找表达式。
这将给予一个如下的数组。


的数据
现在,将这个数组交给ForEach,但跳过第一个元素(@skip(variables('split_with_serial'),1)),因为我们不需要它。
在Foreach中,使用将变量活动追加到数组并使用以下表达式。

@concat('SERIAL',split(item(),'":{')[0])



这将给予键的数组。这里,为了显示输出,我将上面的数组存储在另一个数组中。



要检索JSON中的值,请将此数组交给ForEach并在其中使用以下表达式。

@activity('Web1').output.root[item()].values.variousArrays

mccptt67

mccptt672#

经过一些返工,我已经解决了如下:
1.字符串中转换的JSon结构
1.将序列号替换为静态描述
1.使用JSON()函数重新转换JSON中的字符串
这样,我就能够使用静态强结构来导航JSON。

相关问题