目录
1、简介
2. 要求
3. 如何使用
3.1 样本数据
3.2 转换
- 下载 Cinchoo ETL 源码
- 下载 Cinchoo ETL 二进制文件 (.NET Core)
- 下载 Cinchoo ETL 二进制文件 (.NET Framework)
- 工作示例(.NET Fiddle)
ChoETL是一个用于.NET的开源ETL(提取、转换和加载)框架。它是一个基于代码的库,用于在.NET环境中从多个来源提取数据、转换并加载到您自己的数据仓库中。您可以立即在数据仓库中获取数据。
本技巧介绍使用Cinchoo ETL框架从JSON格式生成CSV文件。使用非常简单,几行代码就可以完成转换。您可以转换大文件,因为转换过程是基于流的,速度非常快且内存占用少。
2. 要求该框架库是使用.NET 4.5/.NET Core Frameworks用C#编写的。
3. 如何使用 3.1 样本数据让我们从一个转换以下CSV输入文件的简单示例开始。
清单 3.1.1示例CSV数据输入文件(Emp.csv)
id,name,nestedobject/id,nestedobject/name,nestedarray/0/name,
nestedarray/0/city,nestedarray/1/name,nestedarray/1/city
1,Tomy,nestedobject_id1,nestedobject_name1,nestedarray0_name_1,
nestedarray0_city_1,nestedarray1_name_1,nestedarray1_city_1
2,Mark,nestedobject_id2,nestedobject_name2,nestedarray0_name_2,
nestedarray0_city_2,nestedarray1_name_2,nestedarray1_city_2
上面的CSV是动态的,可能包含嵌套对象、数组。CSV字段由'/'字符分隔以表示复杂数据。这不是一个普通的CSV文件,有时我们可能会遇到这样的文件来表示嵌套结构。
清单 3.1.2 预期的JSON输出文件(Emp.json)
[
{
"id": "1",
"name": "Tomy",
"nestedobject": {
"id": "nestedobject_id1",
"name": "nestedobject_name1"
},
"nestedarray": [
{
"name": "nestedarray0_name_1",
"city": "nestedarray0_city_1"
},
{
"name": "nestedarray1_name_1",
"city": "nestedarray1_city_1"
}
]
},
{
"id": "2",
"name": "Mark",
"nestedobject": {
"id": "nestedobject_id2",
"name": "nestedobject_name2"
},
"nestedarray": [
{
"name": "nestedarray0_name_2",
"city": "nestedarray0_city_2"
},
{
"name": "nestedarray1_name_2",
"city": "nestedarray1_city_2"
}
]
}
]
首先要做的是安装ChoETL.JSON/ChoETL.JSON.NETStandard nuget包。为此,请在包管理器控制台中运行以下命令。
.NET Framework
Install-Package ChoETL.JSON
.NET Core
Install-Package ChoETL.JSON.NETStandard
现在将ChoETL命名空间添加到程序中。
using ChoETL;
下面的示例代码展示了如何将这种复杂的CSV文件转换为JSON格式。不需要POCO对象结构。
清单 3.2.1 CSV到JSON文件的转换
private static void Conversion()
{
string csv = @"id,name,nestedobject/id,nestedobject/name,
nestedarray/0/name,nestedarray/0/city,nestedarray/1/name,nestedarray/1/city
1,Tomy,nestedobject_id1,nestedobject_name1,nestedarray0_name_1,
nestedarray0_city_1,nestedarray1_name_1,nestedarray1_city_1
2,Mark,nestedobject_id2,nestedobject_name2,nestedarray0_name_2,
nestedarray0_city_2,nestedarray1_name_2,nestedarray1_city_2";
using (var w = new ChoJSONWriter(Console.Out)
.Configure(c => c.DefaultArrayHandling = false)
)
{
using (var r = ChoCSVReader.LoadText(csv).WithFirstLineHeader()
.Configure(c => c.NestedColumnSeparator = '/')
)
w.Write(r);
}
}
创建用于读取emp.csv文件的ChoCSVReader对象实例。然后使用以下配置设置创建一个ChoJSONWriter用于生成JSON(emp.json )文件的实例:
- Configure(c => c.DefaultArrayHandling = false)——告诉JSON writer在写入对象时关闭默认数组处理
- Configure(c => c.NestedColumnSeparator = '/')——告诉CSV阅读器嵌套列分隔符
Fiddle示例:https ://dotnetfiddle.net/BBIQF8
JSON转CSV请参考其他类似文章:
- Cinchoo ETL——快速入门:将JSON转换为CSV文件
- Cinchoo ETL——将复杂的嵌套JSON转换为CSV
https://www.codeproject.com/Tips/5314666/Cinchoo-ETL-Converting-CSV-to-JSON-with-Nested-Obj