Azure 数据工厂 - forEach - JSON 到数组错误
Azure Data Factory - forEach - JSON to array errors
我的目标是使用 Azure 数据工厂通过 REST API 将数据从一个地方复制到另一个地方。
复制的第一部分是使用嵌套 JSON/array 中的 ForEach activity 到 select 参数。由于 ForEach activity.
中的各种错误消息,我在使用此嵌套 JSON 时遇到了问题
我的JSON是下面的形式:
(
{
"key_1": "value_1",
"key_2": [
"value_2_1",
"value_2_2"
]
}
)
首先我在它前面设置了@json转换函数:
@json(
'{
"key_1": "value_1",
"key_2": [
"value_2_1",
"value_2_2"
]
}'
)
在这里你可以看到Execute Pipeline对象及其参数:
我将此 JSON 设置为执行管道对象中的参数。我将其类型设置为“数组”。 (郑重声明,即使我尝试将参数类型更改为“String”或“Object”,我仍然收到类似的错误消息。)
ForEach activity 用于 select 嵌套 JSON 中的一个项目,写入参数。
这会立即在执行管道中产生以下错误 activity:
Operation on target... ...failed: The function 'length' expects its parameter to be an array or a string. The provided value is of type 'Object'.
因此,即使我将 JSON 参数类型设置为“Array”,但在调试管道时它会更改为“Object” activity. 查看下面的错误:
接下来,我尝试在 JSON 文本之前使用 ADF @createArray 函数。
@createArray(
'{
"key_1": "value_1",
"key_2": [
"value_2_1",
"value_2_2"
]
}'
)
调试时,forEach activity 在第一个 Copy data activity:
中抛出错误
The expression 'concat(item().SELECTING_key_1_FROM_MY_JSON))' cannot be evaluated because property 'key_1' cannot be selected. Property selection is not supported on values of type 'String'.
请帮帮我,我在尝试将 JSON 转换为数组时做错了什么?我应该在代码中更改什么?
到目前为止,我已经尝试更改参数类型并在 JSON 动态内容中使用各种函数,但没有成功。
更新:
如果你想在 Copy Data --> Sink 中更改文件名。
您可以键入动态内容 @concat(pipeline().parameters.Pip_Object.key_1,'.json')
来重命名文件。
如有理解错误请指正
首先,我们应该使用参数存储Json数组如下。因为 Variables 不支持存储 Json 数组。 变量只支持存储简单数据类型如["1","2","3"...]
.
Json数组格式应如下:
[{"key_1": "value_1"},{"key_2": ["value_2_1","value_2_2"]}]
我在这里创建了一个简单的测试。然后 ForEach Json 数组:
里面ForEach1
activity,传@item()
给对象类型参数Pip_Object
.
输入如下:
我们最终使用了两条管道:一条通用管道和一条特定管道。
通用的有JSON作为参数(JSON_PARAMETER),我们将其设置为以下形式的默认值
[{"key_1":"value_1","key_2":["value_2"]},{"key_1":"value_3","key_2":["value_2"]}, ...etc. ...}]
通用管道有一个 forEach 循环,其中提到的 JSON 参数在设置 -> 项目中被调用:
@JSON(pipeline().parameters.JSON_PARAMETER)
在特定的管道中,有一个执行管道activity,其中JSON_PARAMETER在设置->参数中找到。如果使用默认值 JSON_PARAMETER,则该字段留空。如果我们想更改参数,在执行管道之前,我们放置一个设置变量 activity,我们将变量 -> 值更改为:
@concat('
[
{"key_1":"value_1",
"key_2":
["value_2",
"value_3"
]
},
{"key_1":"value_3",
...and so on...
}
]
')
为每个设置使用表达式、函数和系统变量的任意组合在上面添加动态内容
@activity('Get Metadata1').output.childItems
我的目标是使用 Azure 数据工厂通过 REST API 将数据从一个地方复制到另一个地方。 复制的第一部分是使用嵌套 JSON/array 中的 ForEach activity 到 select 参数。由于 ForEach activity.
中的各种错误消息,我在使用此嵌套 JSON 时遇到了问题我的JSON是下面的形式:
(
{
"key_1": "value_1",
"key_2": [
"value_2_1",
"value_2_2"
]
}
)
首先我在它前面设置了@json转换函数:
@json(
'{
"key_1": "value_1",
"key_2": [
"value_2_1",
"value_2_2"
]
}'
)
在这里你可以看到Execute Pipeline对象及其参数:
我将此 JSON 设置为执行管道对象中的参数。我将其类型设置为“数组”。 (郑重声明,即使我尝试将参数类型更改为“String”或“Object”,我仍然收到类似的错误消息。)
ForEach activity 用于 select 嵌套 JSON 中的一个项目,写入参数。
这会立即在执行管道中产生以下错误 activity:
Operation on target... ...failed: The function 'length' expects its parameter to be an array or a string. The provided value is of type 'Object'.
因此,即使我将 JSON 参数类型设置为“Array”,但在调试管道时它会更改为“Object” activity. 查看下面的错误:
接下来,我尝试在 JSON 文本之前使用 ADF @createArray 函数。
@createArray(
'{
"key_1": "value_1",
"key_2": [
"value_2_1",
"value_2_2"
]
}'
)
调试时,forEach activity 在第一个 Copy data activity:
中抛出错误The expression 'concat(item().SELECTING_key_1_FROM_MY_JSON))' cannot be evaluated because property 'key_1' cannot be selected. Property selection is not supported on values of type 'String'.
请帮帮我,我在尝试将 JSON 转换为数组时做错了什么?我应该在代码中更改什么?
到目前为止,我已经尝试更改参数类型并在 JSON 动态内容中使用各种函数,但没有成功。
更新:
如果你想在 Copy Data --> Sink 中更改文件名。
@concat(pipeline().parameters.Pip_Object.key_1,'.json')
来重命名文件。
如有理解错误请指正
首先,我们应该使用参数存储Json数组如下。因为 Variables 不支持存储 Json 数组。 变量只支持存储简单数据类型如
["1","2","3"...]
.
Json数组格式应如下:
[{"key_1": "value_1"},{"key_2": ["value_2_1","value_2_2"]}]我在这里创建了一个简单的测试。然后 ForEach Json 数组:
里面
ForEach1
activity,传@item()
给对象类型参数Pip_Object
.
输入如下:
我们最终使用了两条管道:一条通用管道和一条特定管道。
通用的有JSON作为参数(JSON_PARAMETER),我们将其设置为以下形式的默认值
[{"key_1":"value_1","key_2":["value_2"]},{"key_1":"value_3","key_2":["value_2"]}, ...etc. ...}]
通用管道有一个 forEach 循环,其中提到的 JSON 参数在设置 -> 项目中被调用:
@JSON(pipeline().parameters.JSON_PARAMETER)
在特定的管道中,有一个执行管道activity,其中JSON_PARAMETER在设置->参数中找到。如果使用默认值 JSON_PARAMETER,则该字段留空。如果我们想更改参数,在执行管道之前,我们放置一个设置变量 activity,我们将变量 -> 值更改为:
@concat('
[
{"key_1":"value_1",
"key_2":
["value_2",
"value_3"
]
},
{"key_1":"value_3",
...and so on...
}
]
')
为每个设置使用表达式、函数和系统变量的任意组合在上面添加动态内容
@activity('Get Metadata1').output.childItems