使用ChoETL将复杂JSON转CSV时数据缺失问题求助
解决ChoETL转换JSON到CSV时数组与单个值类型不一致导致数据丢失的问题
问题说明
使用ChoETL处理JSON转CSV时,extension数组内的对象存在类型不一致情况:第一个对象的value是数组,后续对象的value是单个字符串,导致单个值(如20、35)被忽略,无法生成预期的CSV结构。
现有代码
StringBuilder csv = new StringBuilder(); using (var r = new ChoJSONReader(FileNameSample33JSON) .WithJSONPath("$..getUsers[*]", true)) { using (var w = new ChoCSVWriter(csv) .WithFirstLineHeader() .WithMaxScanRows(10) .Configure(c => c.ThrowAndStopOnMissingField = false)) w.Write(r); }
目标JSON片段
"extension": [ { "Test": "value", "value": [ "0", "1", "2" ] }, { "Test1": "Test", "value": "20" }, { "Test2": "Test", "value": "35" } ]
期望CSV输出
| extension_0_value_0 | extension_0_value_1 | extension_0_value_2 | extension_1_value | extension_2_value |
|---|---|---|---|---|
| 0 | 1 | 2 | 20 | 35 |
解决方案
核心思路是统一value字段的类型,将单个值包装为数组,让ChoETL能识别所有字段并正确输出。
方案1:自定义值转换器(推荐)
通过转换器将所有extension对象的value统一转为数组类型,确保扫描规则一致:
StringBuilder csv = new StringBuilder(); using (var r = new ChoJSONReader(FileNameSample33JSON) .WithJSONPath("$..getUsers[*]", true) // 为所有extension内的value字段添加类型转换 .ConfigureField("extension[*].value", cfg => { cfg.ValueConverter = o => { // 单个字符串转为单元素数组,数组则直接返回 return o is string singleValue ? new[] { singleValue } : o; }; })) { using (var w = new ChoCSVWriter(csv) .WithFirstLineHeader() .WithMaxScanRows(10) .Configure(c => c.ThrowAndStopOnMissingField = false)) { w.Write(r); } }
方案2:显式声明字段类型
逐个指定extension元素的value字段类型为数组,强制ChoETL按数组规则读取:
StringBuilder csv = new StringBuilder(); using (var r = new ChoJSONReader(FileNameSample33JSON) .WithJSONPath("$..getUsers[*]", true) .WithField("extension_0_value", jsonPath: "$.extension[0].value", fieldType: typeof(string[])) .WithField("extension_1_value", jsonPath: "$.extension[1].value", fieldType: typeof(string[])) .WithField("extension_2_value", jsonPath: "$.extension[2].value", fieldType: typeof(string[]))) { using (var w = new ChoCSVWriter(csv) .WithFirstLineHeader() .WithMaxScanRows(10) .Configure(c => c.ThrowAndStopOnMissingField = false)) { w.Write(r); } }
内容的提问来源于stack exchange,提问作者Karthigeyan P R
相关产品推荐
相关产品推荐

