我想将以下JSON转换为CSV:

{
  "Data": [
    {
      "Ref": "h123",
      "StartDate": "2023-01-01",
      "EndDate": "2024-01-01",
      "Person": {
        "Name": "Tester",
        "Email": "test@test.com",
        "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": "test@test.com",
        "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,test@test.com,,1 avenue,,,,,100123,,x,y,z,h1234,2023-01-01,2024-01-01,Tester1,test@test.com,,2 avenue,,,,,100124,,x,y,z

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

还可以进行配置,使ExtraDataExtraData1之间的switch 包括和不包括在CSV中.

推荐答案

我假设你想通过ExtraData1个子 node 将JSON转换为CSV.如果是,则有现成的选项,由该 node 设置,以输出预期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,test@test.com,,1 avenue,,,,,100123,,x,y,z
h1234,2023-01-01,2024-01-01,Tester1,test@test.com,,2 avenue,,,,,100124,,x,y,z

样品小提琴:https://dotnetfiddle.net/7jjCPa

Json相关问答推荐

JOLT转换,将属性复制到同级别的dict中

Golang返回的JSON顶级字段是可变的.如何在 struct 中使用

从包含 JSON 对象序列的文件中获取第一个 JSON 对象

如何强制仅有一个元素的数组在JSON中生成方括号

将带有::text[]的JSON数组转换未按预期工作

如何使用 jq 在连续的 json 记录流上调用操作

用于遮蔽卡的 Jolt 规格

Servicestack 返回数组而不是带有数组的对象

Golang / Go - 如果 struct 没有字段,如何将其编组为空?

如何使用法语口音对数组进行 json_encode?

如何在不解析的情况下在javascript中同步包含JSON数据?

在 JSON 字符串中react i18n 换行符

使用适用于 Python 的 Google API - 我从哪里获取 client_secrets.json 文件?

如何在spark 上将json字符串转换为数据帧

如何在dart Flutter 中将json字符串转换为json对象?

在 iPhone 上解析 JSON 日期

使用 jQuery 和 JSON 填充表单?

添加json文件注释

我如何反序列化以杰克逊为单位的时间戳?

杰克逊自动将 Joda DateTime 格式化为 ISO 8601 格式