在 Azure 数据工厂中,我收到字符串形式的响应,它是 csv 格式的。 但有警告。 数据看起来像这样
Amount,Date,Code,Hours,SourceSystem\r\n0,2024-10-14 00:00:00,HOL,8,106\r\n0,2024-03-1 00:00:00,HLL,45,2,106\r\n0,2024-12-15 00:00:00,AAA,2,106\r\n0,2024-10-14 00:00:00,HOL,53,106\r\n
正如所见,有 在那里分隔“行”,就像在 csv 文件中想象的那样。 我的目标是获取该字符串,并将其转换为 Json 数组,如下所示
[
{
"Amount":"0",
"Date":"2024-10-14 00:00:00",
"Code":"HOL",
"Hours":"8",
"SourceSystem":"106"
},
{
"Amount":"0",
"Date":"2024-10-14 00:00:00",
"Code":"HOL",
"Hours":"8",
"SourceSystem":"106"
},
{
"Amount":"0",
"Date":"2024-10-14 00:00:00",
"Code":"HOL",
"Hours":"8",
"SourceSystem":"106"
},
]
我不确定我是否理解在哪一步以及如何转换或转义“ " 在原始字符串中。
如果您的 CSV 文件中的行数少于 5000 行,您可以尝试以下方法。
首先将表达式
@string('\\n')
作为 csv 数据集中的行分隔符。我曾尝试将 \r\n
设置为行分隔符,但即使通过动态表达式它也不起作用。所以,我想出了这个解决方法。确保数据集中的架构清晰。
在管道中,将此数据集提供给查找活动,并取消选中其中的“仅第一行”。查找活动的输出将给出一个 JSON 数组,其中在最后一列 //114//
中包含一个字符串
SourceSystem
。删除此字符串,它将是您所需的输出 JSON 数组。在数组类型设置变量活动中使用以下表达式。
@json(replace(string(activity('Lookup1').output.value),'\\114\\',''))
结果 JSON 数组:
您可以使用复制活动将此 JSON 数组存储在文件中。通过这个
SO答案了解更多信息。 如果超过5000行,您可以使用ADF中的Mapping数据流来实现您的要求。
将相同的数据集提供给数据流源并在源中导入投影。使用选择转换删除最后一个列名称中的
\r
,并使用带有表达式
replace(SourceSystem,'\\r','')
的派生列转换来删除列行中的 \r
。添加 JSON 数据集作为接收器,它将给出所需的结果。