c# - ChoETL json 到 csv 与多个数组

如果我有一个这样的示例 json 并且我想使用 choETL 将 json 转换为 csv,我如何将两个数组写入一个文件?

{
  "Id": "123456",
  "Request": [
    {
      "firstName": "A",
      "lastName": "B",
    }
  ],
  "Response": [
    {
      "SId": "123"
    }
  ]
}

CSV 文件应该类似于 Id,firstName,lastName,SId 123456,A,B,123

回答1

以下是使用 ChoETL 从 json 生成预期 CSV 的方法

using (var r = ChoJSONReader.LoadText(json)
       .WithField("Id")
       .WithField("firstName", jsonPath:"Request[0].firstName", isArray:false)
       .WithField("lastName", jsonPath:"Request[0].lastName", isArray:false)
       .WithField("SId", jsonPath:"Response[0].SId", isArray:false)
       )
{
    using (var w = new ChoCSVWriter(Console.Out).WithFirstLineHeader())
        w.Write(r);
}

输出:

Id,firstName,lastName,SId
123456,A,B,123

小提琴示例:https://dotnetfiddle.net/CnBX3C

更新:

如果数组是动态的,这是通过 Request json 数组字段生成 CSV 输出的一种方法

示例 JSON:

{
  "Id": "123456",
  "Request": [
    {
      "firstName": "A",
      "lastName": "B",
    },
    {
      "firstName": "A1",
      "lastName": "B1",
    }
    ],
  "Response": [
    {
      "SId": "123"
    },
    {
      "SId": "1234"
    }
  ]
}

这是通过 Request json 数组字段解析 json 的代码

using (var r = ChoJSONReader.LoadText(json)
       .Configure(c => c.FlattenNode = true).Configure(c => c.FlattenByNodeName = "Request")
       )
{
    using (var w = new ChoCSVWriter(Console.Out).WithFirstLineHeader())
        w.Write(r);
}

输出:

Id,Response_0_SId,Response_1_SId,RequestfirstName,RequestlastName
123456,123,1234,A,B
123456,123,1234,A1,B

小提琴示例:https://dotnetfiddle.net/CnBX3C

相似文章

c# - NET 5 DLL 存在但未加载

这个问题是关于为什么程序集找不到位于同一文件夹中的库。据我所知,调用者的位数(x64)与无法找到的NuGet包(AnyCPU)一致。即使我将所有内容重新编译到AnyCPU,错误消息仍然存在:Could...

r - 在 R 中加载 csv 数据框时添加列

我们正在Airbnb内部为我们的大学开展一个项目。我们加载了许多不同城市的列表,并希望将所有数据加载到一个相互绑定的数据框中。但是,我们解决了这个问题。现在我们需要为每个数据集添加一个列,说明它属于哪...