Cinchoo ETL——快速入门:将CSV转换为JSON文件

目录

1、简介

2. 要求

3. 如何使用

3.1 样本数据

3.2 安装库

3.3 快速转换

3.4 选择性列转换

3.3 使用POCO对象


1、简介

ChoETL是一个用于.NET的开源ETL(提取、转换和加载)框架。它是一个基于代码的库,用于在.NET环境中从多个来源提取数据、转换并加载到您自己的数据仓库中。您可以立即在数据仓库中获取数据。

本文讨论使用Cinchoo ETL框架将CSV文件转换为JSON格式文件。使用非常简单,几行代码就可以完成转换。您可以转换大文件,因为转换过程是基于流的,速度非常快且内存占用少。

2. 要求

该框架库是使用.NET 4.5/.NET Core 3.x框架用C#编写的。

3. 如何使用

3.1 样本数据

让我们先来看一个转换以下CSV文件的简单示例。此示例CSV包含具有不同格式的值的所有可能组合。

清单 3.1.1 示例CSV文件 (emp.json)

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 Standard Framework

Install-Package ChoETL.JSON

.NET Core

Install-Package ChoETL.JSON.NETStandard

现在将ChoETL命名空间添加到程序中。

using ChoETL;

3.3 快速转换

让我们使用该库将CSV文件转换为JSON格式的文件。它很简单,只需几行代码即可完成。不需要POCO类。它速度快、基于流且占用内存少。

清单 3.3.1 快速CSVJSON文件转换

private static void QuickConversion()
{
    using (var r = new ChoCSVReader("emp.csv")
           .WithFirstLineHeader()
           .MayHaveQuotedFields()
           )
    {
        using (var w = new ChoJSONWriter(Console.Out)
               .UseJsonSerialization()
              )
            w.Write(r);
    }
}

创建一个用于生成JSON (emp.json )文件的ChoJSONWriter实例。然后创建一个ChoCSVReader对象实例来读取emp.csv文件。由于CSV带有一些带引号的字段,因此添加MayHaveQuotedFields()。最后在JSONWriter上调用'Write'方法将对象写入输出文件。

Fiddle示例:https ://dotnetfiddle.net/zZWBQK

3.4 选择性列转换

在某些情况下,您可能希望控制在JSON输出文件中输出选择性列。并且您希望以本机格式指定和处理字段,以便可以以更清洁的方式生成JSON输出。

在下面的演示中,我们将选择'firstName''lastName''city'列。

清单 3.4.1 快速CSVJSON文件转换

private static void SelectiveColumnTest()
{
    using (var r = new ChoCSVReader("emp.csv"
           .WithFirstLineHeader()
           .MayHaveQuotedFields()
           .WithField("FirstName")
           .WithField("LastName")
           .WithField("City")
          )
    {
        using (var w = new ChoJSONWriter("emp.json")
               .UseJsonSerialization()
              )
            w.Write(r);
    }
}

在上面,所有的数据元素都被当作文本处理和转换。如果您想为某些列添加类型并以本机格式输出,您可以使用'WithField'方法来实现。

Fiddle示例:https ://dotnetfiddle.net/7xNC8f

清单 3.4.2  JSON输出文件

[
  {
    "FirstName": "John",
    "LastName": "Doe",
    "City": "Riverside"
  },
  {
    "FirstName": "Jack",
    "LastName": "McGinnis",
    "City": "Phila"
  },
  {
    "FirstName": "John \"Da Man\"",
    "LastName": "Repici",
    "City": "Riverside"
  },
  {
    "FirstName": "Stephen",
    "LastName": "Tyler",
    "City": "SomeTown"
  },
  {
    "FirstName": null,
    "LastName": "Blankman",
    "City": "SomeTown"
  },
  {
    "FirstName": "Joan \"the bone\", Anne",
    "LastName": "Jet",
    "City": "Desert City"
  }
]

3.3 使用POCO对象

这种方法向您展示了如何定义POCO实体类并将它们用于转换过程。这种方法更安全,并且可以更好地控制转换过程,例如进行属性验证、使用回调机制等。

首先,创建一个属性匹配CSV文件的类。

清单 3.3.1 映射类

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
    public string Zip{ get; set; }
}

然后使用下面的这个类来进行文件的转换。

清单 3.3.2 使用POCO对象将JSON转换为CSV文件

private static void UsingPOCO()
{
    using (var r = new ChoCSVReader<Employee>("emp.csv")
           .WithFirstLineHeader()
           .MayHaveQuotedFields()
          )
    {
        using (var w = new ChoJSONWriter<Employee>("emp.json")
               .UseJsonSerialization()
              )
            w.Write(r);
    }
}

Fiddle示例:https ://dotnetfiddle.net/w43fHa

下载上面附加的示例,尝试一下。

https://www.codeproject.com/Tips/1209690/Cinchoo-ETL-Quick-Start-Converting-CSV-to-JSON-Fil

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值