一、简介
ChoETL是一个用于 .NET 的开源 ETL(提取、转换和加载)框架。它是一个基于代码的库,用于在 .NET 环境中从多个来源提取数据、转换并加载到自己的数据仓库中。可以立即在数据仓库中获取数据。
使用Cinchoo ETL框架将 CSV 文件转换为 JSON 格式文件非常简单,几行代码就可以完成转换。而且可以转换大文件,因为转换过程是基于流的,速度非常快且内存占用少。
2. 要求
该框架库是使用 .NET 4.5 / .NET Core 3.x 框架用 C# 编写的。
3. 如何使用
3.1 样本数据
先来看一个转换以下CSV文件的简单示例。此示例 CSV 包含具有不同格式的值的所有可能组合。
示例 CSV 文件 (emp.csv)
FirstName,LastName,Street,City,State,Zip
John,Doe,120 jefferson st.,Riverside, NJ, 08075
Jack,McGinnis,220 hobo Av.,Phila, PA,09119
"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075
Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234
,Blankman,,SomeTown, SD, 00298
"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123
预期的 JSON 文件将是 ( emp.json ):
[
{
"FirstName": "John",
"LastName": "Doe",
"Street": "120 jefferson st.",
"City": "Riverside",
"State": "NJ",
"Zip": "08075"
},
{
"FirstName": "Jack",
"LastName": "McGinnis",
"Street": "220 hobo Av.",
"City": "Phila",
"State": "PA",
"Zip": "09119"
},
{
"FirstName": "John \"Da Man\"",
"LastName": "Repici",
"Street": "120 Jefferson St.",
"City": "Riverside",
"State": "NJ",
"Zip": "08075"
},
{
"FirstName": "Stephen",
"LastName": "Tyler",
"Street": "7452 Terrace \"At the Plaza\" road",
"City": "SomeTown",
"State": "SD",
"Zip": "91234"
},
{
"FirstName": null,
"LastName": "Blankman",
"Street": null,
"City": "SomeTown",
"State": "SD",
"Zip": "00298"
},
{
"FirstName": "Joan \"the bone\", Anne",
"LastName": "Jet",
"Street": "9th, at Terrace plc",
"City": "Desert City",
"State": "CO",
"Zip": "00123"
}
]
3.2 安装库
接下来,安装ChoETL.JSON / ChoETL.JSON.NETStandard
nuget 包。在包管理器控制台中运行以下命令。
.NET 标准框架
Install-Package ChoETL.JSON
.NET 核心
Install-Package ChoETL.JSON.NETStandard
现在将ChoETL
命名空间添加到程序中。
using ChoETL;
3.3 快速转换
使用该库将 CSV 文件转换为 JSON 格式的文件,只需几行代码即可完成,速度快、基于流且占用内存少。
快速 CSV 到 JSON 文件转换
private static void QuickConversion()
{
using (var r = new ChoCSVReader("emp.csv")
.WithFirstLineHeader()
.MayHaveQuotedFields()
)
{
using (var w = new ChoJSONWriter(Console.Out)
.UseJsonSerialization()
)
w.Write(r);
}
}
创建一个ChoJSONWriter
用于生成 JSON ( emp.json ) 文件的实例。然后创建一个ChoCSVReader
对象实例来读取emp.csv文件。由于 CSV 带有一些带引号的字段,因此添加MayHaveQuotedFields()
. 最后调用' Write
'方法JSONWriter
将对象写入输出文件。