您当前的位置: 首页 >  json

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

寒冰屋 发布时间:2022-05-10 21:30:00 ,浏览量:0

目录

1、简介

2. 要求

3. 如何使用

3.1 样本数据

3.2 安装库

3.3 快速转换

3.4 选择性列转换

3.3 使用POCO对象

  • 下载 Cinchoo ETL 源码
  • 下载 Cinchoo ETL 二进制文件 (.NET Core)
  • 下载 Cinchoo ETL 二进制文件 (.NET Framework)
  • 工作示例 1(.NET Fiddle)
  • 工作示例 2 (.NET Fiddle)
  • 工作示例 3(.NET Fiddle)
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 快速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);
    }
}

创建一个用于生成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 快速CSV到JSON文件转换

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("emp.csv")
           .WithFirstLineHeader()
           .MayHaveQuotedFields()
          )
    {
        using (var w = new ChoJSONWriter("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

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0556s