如何使用 ChoETL 将复杂的 JSON 转换为 CSV

问题描述 投票:0回答:1

我想将以下 JSON 转换为 CSV:

{
  "Data": [
    {
      "Ref": "h123",
      "StartDate": "2023-01-01",
      "EndDate": "2024-01-01",
      "Person": {
        "Name": "Tester",
        "Email": "[email protected]",
        "PhoneNumber": null,
        "AddressLine1": "1 avenue",
        "AddressLine2": null,
        "AddressLine3": null,
        "AddressLine4": null,
        "AddressLine5": null,
        "Zipcode": "100123"
      },
      "ExtraData": null,
      "ExtraData1": {
        "X": "x",
        "Y": "y",
        "Z": "z"
      }
    },
    {
      "Ref": "h1234",
      "StartDate": "2023-01-01",
      "EndDate": "2024-01-01",
      "Person": {
        "Name": "Tester1",
        "Email": "[email protected]",
        "PhoneNumber": null,
        "AddressLine1": "2 avenue",
        "AddressLine2": null,
        "AddressLine3": null,
        "AddressLine4": null,
        "AddressLine5": null,
        "Zipcode": "100124"
      },
      "ExtraData": null,
      "ExtraData1": {
        "X": "x",
        "Y": "y",
        "Z": "z"
      }
    }
  ]
}

我使用最新的

ChoETL.JSON.NETStandard
和.NET6(和.NET8)

using var reader = new ChoJSONReader("sample.json");
using var writer = new ChoCSVWriter("sample.csv").WithFirstLineHeader();
writer.Write(reader);

但是输出的 CSV 只有一行,假设需要更多配置。

Data_0_Ref,Data_0_StartDate,Data_0_EndDate,Data_0_Person_Name,Data_0_Person_Email,Data_0_Person_PhoneNumber,Data_0_Person_AddressLine1,Data_0_Person_AddressLine2,Data_0_Person_AddressLine3,Data_0_Person_AddressLine4,Data_0_Person_AddressLine5,Data_0_Person_Zipcode,Data_0_ExtraData,Data_0_ExtraData1_X,Data_0_ExtraData1_Y,Data_0_ExtraData1_Z,Data_1_Ref,Data_1_StartDate,Data_1_EndDate,Data_1_Person_Name,Data_1_Person_Email,Data_1_Person_PhoneNumber,Data_1_Person_AddressLine1,Data_1_Person_AddressLine2,Data_1_Person_AddressLine3,Data_1_Person_AddressLine4,Data_1_Person_AddressLine5,Data_1_Person_Zipcode,Data_1_ExtraData,Data_1_ExtraData1_X,Data_1_ExtraData1_Y,Data_1_ExtraData1_Z
h123,2023-01-01,2024-01-01,Tester,[email protected],,1 avenue,,,,,100123,,x,y,z,h1234,2023-01-01,2024-01-01,Tester1,[email protected],,2 avenue,,,,,100124,,x,y,z

我期望的是没有字段索引的多行。

还可以进行配置,以便在 CSV 中包含和不包含

ExtraData
ExtraData1
之间进行切换。

json csv choetl
1个回答
0
投票

我假设你想通过

ExtraData1
子节点将 JSON 转换为 csv。如果是,则可以通过此节点设置开箱即用的选项以输出预期的 CSV

using (var r = ChoJSONReader.LoadText(json)
       .WithJSONPath("Data")
       .Configure(c => c.DefaultArrayHandling = false)
       .Configure(c => c.FlattenNode = true)
       .Configure(c => c.UseNestedKeyFormat = true)
       .Configure(c => c.FlattenByNodeName = "ExtraData1")
      )
{
    using (var w = new ChoCSVWriter(Console.Out)
           .WithFirstLineHeader()
          )
    {
        w.Write(r);
    }
} 

输出:

Ref,StartDate,EndDate,Person_Name,Person_Email,Person_PhoneNumber,Person_AddressLine1,Person_AddressLine2,Person_AddressLine3,Person_AddressLine4,Person_AddressLine5,Person_Zipcode,ExtraData,ExtraData1_X,ExtraData1_Y,ExtraData1_Z
h123,2023-01-01,2024-01-01,Tester,[email protected],,1 avenue,,,,,100123,,x,y,z
h1234,2023-01-01,2024-01-01,Tester1,[email protected],,2 avenue,,,,,100124,,x,y,z
© www.soinside.com 2019 - 2024. All rights reserved.