当前位置: 首页>数据库>正文

axios 把json 转存为文件 将json文件转化为csv文件

目录

1、简介

2. 要求

3. 如何使用

3.1 样本数据

3.2 快速转换

3.3 使用POCO对象

3.4 使用投影


下载 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框架从JSON格式生成CSV文件。使用非常简单,几行代码就可以完成转换。您可以转换大文件,因为转换过程是基于流的,速度非常快且内存占用少。

2. 要求

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

3. 如何使用

3.1 样本数据

让我们从一个转换以下JSON输入文件的简单示例开始。

清单 3.1.1 示例员工JSON数据输入文件(emp.json)

[
    {
        "firstName": "John",
        "lastName": "Smith",
        "age": 25,
        "address": {
            "streetAddress": "21 2nd Street",
            "city": "New York",
            "state": "NY",
            "postalCode": "10021"
        },
        "phoneNumber": [
            {
                "type": "home",
                "number": "212 555-1234"
            },
            {
                "type": "fax",
                "number": "646 555-4567"
            }
        ]
    },
    {
        "firstName": "Tom",
        "lastName": "Mark",
        "age": 50,
        "address": {
            "streetAddress": "10 Main Street",
            "city": "Edison",
            "state": "NJ",
            "postalCode": "08837"
        },
        "phoneNumber": [
            {
                "type": "home",
                "number": "732 555-1234"
            },
            {
                "type": "fax",
                "number": "609 555-4567"
            }
        ]
    }
]



由于JSON消息是分层和结构化格式,因此您必须展平才能生成CSV文件。

假设您想要生成以下CSV格式的输出。

清单 3.1.2 员工CSV数据输出文件(emp.csv)


FirstName,LastName,Age,StreetAddress,City,State,PostalCode,Phone,Fax
John,Smith,25,21 2nd Street,New York,NY,10021,212 555-1234,646 555-4567
Tom,Mark,50,10 Main Street,Edison,NJ,08837,732 555-1234,609 555-4567


首先要做的是安装ChoETL.JSON /ChoETL.JSON.NETStandard nuget包。为此,请在包管理器控制台中运行以下命令。

.NET Framework


Install-Package ChoETL.JSON


.NET Core


Install-Package ChoETL.JSON.NETStandard

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


using ChoETL;

3.2 快速转换


此方法展示了如何使用少量代码将JSON文件转换为CSV格式。不需要设置/POCO类。

清单 3.2.1 快速JSON到CSV文件转换

private static void QuickConversion()
{
    using (var csv = new ChoCSVWriter("emp.csv").WithFirstLineHeader())
    {
        using (var json = new ChoJSONReader("emp.json")
            .WithField("FirstName")
            .WithField("LastName")
            .WithField("Age", fieldType: typeof(int))
            .WithField("StreetAddress", jsonPath: "$.address.streetAddress", isArray: false)
            .WithField("City", jsonPath: "$.address.city", isArray: false)
            .WithField("State", jsonPath: "$.address.state", isArray: false)
            .WithField("PostalCode", jsonPath: "$.address.postalCode", isArray: false)
            .WithField("Phone", jsonPath: "$.phoneNumber[?(@.type=='home')].number", 
                        isArray: false)
            .WithField("Fax", jsonPath: "$.phoneNumber[?(@.type=='fax')].number", 
                        isArray: false)
        )
        {
            csv.Write(json);
        }
    }
}



创建一个用于生成CSV(emp.csv )文件的ChoCSVWriter实例。然后创建一个ChoJSONReader对象实例来读取emp.json文件。使用'WithField'方法,使用可选的JSONPath定义每个字段的规格,如上所示。瞧,CSV文件转换发生在这段小代码中。

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

3.3 使用POCO对象

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

首先,在一个扁平的结构中创建一个具有属性的类以及JSONPath表达式。下面,您将找到执行此操作的类的示例。

清单 3.3.1 映射类

public class Employee
{
    [ChoJSONRecordField]
    public string FirstName { get; set; }
    [ChoJSONRecordField]
    public string LastName { get; set; }
    [ChoJSONRecordField]
    public int Age { get; set; }
    [ChoJSONRecordField(JSONPath = "$.address.streetAddress")]
    public string StreetAddress { get; set; }
    [ChoJSONRecordField(JSONPath = "$.address.city")]
    public string City { get; set; }
    [ChoJSONRecordField(JSONPath = "$.address.state")]
    public string State { get; set; }
    [ChoJSONRecordField(JSONPath = "$.address.postalCode")]
    public string PortalCode { get; set; }
    [ChoJSONRecordField(JSONPath = "$.phoneNumber[?(@.type=='home')].number")]
    public string Phone { get; set; }
    [ChoJSONRecordField(JSONPath = "$.phoneNumber[?(@.type=='fax')].number")]
    public string Fax { get; set; }
}



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

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

private static void UsingPOCO()
{
    using (var csv = new ChoCSVWriter("emp.csv").WithFirstLineHeader())
    {
        using (var json = new ChoJSONReader<Employee>("emp.json"))
        {
            csv.Write(json);
        }
    }
}



Fiddle示例:  https ://dotnetfiddle.net/0x07tb

3.4 使用投影

此方法展示了如何使用LINQ投影方法将JSON文件转换为CSV文件。您可能知道,JSON是分层的、关系的和结构化的数据,而CSV不是。如果您有从JSON读取器以分层格式生成的对象,则必须使用LINQ投影进行展平并将它们提供给CSV写入器以创建CSV文件。下面的示例显示了如何执行此操作。

清单 3.4.1 使用Projection将JSON转换为CSV文件

private static void UsingProjection()
{
    using (var csv = new ChoCSVWriter("emp.csv").WithFirstLineHeader())
    {
        using (var json = new ChoJSONReader("emp.json"))
        {
            csv.Write(json.Select(i => new {
                FirstName = i.firstName,
                LastName = i.lastName,
                Age = i.age,
                StreetAddress = i.address.streetAddress,
                City = i.address.city,
                State = i.address.state,
                PostalCode = i.address.postalCode,
                Phone = i.phoneNumber[0].number,
                Fax = i.phoneNumber[1].number
            }));
        }
    }
}




https://www.xamrdz.com/database/6sq1964020.html

相关文章: