我想将以下 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
之间进行切换。
我假设你想通过
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