ADF:将 csv 文本转换为 json

问题描述 投票:0回答:1

在 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"
},
]

我不确定我是否理解在哪一步以及如何转换或转义“ " 在原始字符串中。

json azure csv azure-data-factory
1个回答
0
投票

如果您的 CSV 文件中的行数少于 5000 行,您可以尝试以下方法。

首先将表达式

@string('\\n')
作为 csv 数据集中的行分隔符。我曾尝试将
\r\n
设置为行分隔符,但即使通过动态表达式它也不起作用。所以,我想出了这个解决方法。确保数据集中的架构清晰。

enter image description here

在管道中,将此数据集提供给查找活动,并取消选中其中的“仅第一行”。查找活动的输出将给出一个 JSON 数组,其中在最后一列 //114// 中包含一个字符串

SourceSystem
。删除此字符串,它将是您所需的输出 JSON 数组。
在数组类型设置变量活动中使用以下表达式。

@json(replace(string(activity('Lookup1').output.value),'\\114\\',''))

enter image description here

结果 JSON 数组:

enter image description here您可以使用复制活动将此 JSON 数组存储在文件中。通过这个

SO答案

了解更多信息。 如果超过5000行,您可以使用ADF中的Mapping数据流来实现您的要求。

将相同的数据集提供给数据流源并在源中导入投影。使用选择转换删除最后一个列名称中的

\r

,并使用带有表达式

replace(SourceSystem,'\\r','')
的派生列转换来删除列行中的
\r
。添加 JSON 数据集作为接收器,它将给出所需的结果。
    

© www.soinside.com 2019 - 2024. All rights reserved.