JSON 使用 ChoETL 转换为 CSV 缺少一些数组值

JSON to CSV conversion using ChoETL Some array value missing

我正在将 JSON 文件转换为 CSV 文件。 JSON 有多个嵌套对象和大尺寸。转换时,我能够将所有值从 JSON 中取出并放入 CSV 中。但是,缺少数组值。我正在使用 CHOETL 库。 样本 json 是(原始 json 又长又大)

{
    "getUsers": [
        {
            "UserInformation": {
                "Id": 1111122,
                "firstName": "*****1",
                "UserType": {
                    "name": "CP"
                },
                "primaryState": "MA",
                "otherState": [
                    "MA",
                    "BA"
                ],
                "createdAt": null
            }
        },
        {
            "UserInformation": {
                "Id": 3333,
                "firstName": "*****3",
                "UserType": {
                    "name": "CPP"
                },
                "primaryState": "MPA",
                "otherState": [
                    "KL",
                    "TN",
                    "DL",
                    "AP",
                    "RJ"
                ],
                "createdAt": null
            }
        }
    ]
}

第一个数组中的 otherState 数组是两个,而第二个数组是四个。它没有显示是csv。 输入 json 很长且嵌套层次结构,并且大部分是动态的 代码是

StringBuilder msg = new StringBuilder();

            using (var w = new ChoCSVWriter(msg)
                .WithFirstLineHeader()
                )
            {
                using (var r = new ChoJSONReader(@"E:/Temp/CSV/input/Data_Sample2.json")
                    .WithJSONPath("$..getUsers[*]")
                    )
                {
                    w.Write(r);
                }
            }
            File

输出是

UserInformation_Id,UserInformation_firstName,UserInformation_UserType_name,UserInformation_primaryState,UserInformation_otherState_0,UserInformation_otherState_1,UserInformation_createdAt
1111122,*****1,CP,MA,MA,BA, 3333,*****3,CPP,MPA,KL,TN,

我创建了一个文件test.json并把它放在了bin目录下。 Test.json 内容同上。然后我使用了以下代码:

using (var r = new ChoJSONReader("test.json"))
{
   using (var w = new ChoCSVWriter("sample.csv").WithFirstLineHeader())
   {
      w.Write(r);
   }
}

它生成了包含正确数组值的文件 sample.csv。你确定吗,stringbuilder msg 的内容正确。

您将不得不提及 CSV 驱动程序以使用 MaxScanRows 属性(默认 1)

自动扫描和发现字段

下面的示例代码显示了如何

StringBuilder csv = new StringBuilder();

using (var r = ChoJSONReader.LoadText(json)
    .WithJSONPath("$..getUsers[*]")
    )
{
    using (var w = new ChoCSVWriter(csv)
        .WithFirstLineHeader()
        .Configure(c => c.MaxScanRows = 2)
        .Configure(c => c.ThrowAndStopOnMissingField = false)
        )
    {
        w.Write(r);
    }
}

Console.WriteLine(csv.ToString());