常规的CSV文件将包含所有具有相同列的行和一个可选的标题行,但是在这种情况下,我需要处理一个看起来不标准的CSV文件,因为它的“标题”行包含5列,然后是未指定数量的“正文”行,每行包含约15列(与标题行无关),最后以“页脚”行包含4列结束。]
看起来整个文件代表一个对象,就像这样:
headerValue1,headerValue2,headerValue3,headerValue4,headerValue5 bodyvalue1,bodyvalue2,bodyvalue3,bodyvalue4,bodyvalue5,bodyvalue6,bodyvalue7,bodyvalue8,bodyvalue9 bodyvalue1,bodyvalue2,bodyvalue3,bodyvalue4,bodyvalue5,bodyvalue6,bodyvalue7,bodyvalue8,bodyvalue9 footervalue1,footervalue2,footervalue3,footervalue4
我需要将其转换为JSON格式,因此一直在尝试使用for循环将CSV值设置为对象数组,但是运气不好(没有有用的代码可以发布)。带有标题和不带m子的CSV格式似乎都无法正常工作,因为似乎希望每一列都包含相同的字段类型,但它们却不相同。
[也尝试为其定义一个平面文件模式,但也没有运气(可能是由于我对该领域的了解有限)。
所以我的问题是如何正确或有效地将此CSV数据传递到可用的数组或对象中,或者甚至直接转换为JSON格式?
常规的CSV文件将包含所有具有相同列的行,以及一个可选的标题行,但是在这种情况下,我需要处理一个看起来似乎是非标准的CSV,因为它具有“ ...
DataWeave处理这种情况。未命名的列将获得通用列名('columns_N')。对于example see the documentation。直接有效负载转换(即“有效负载”)有效。
DataWeave示例:
如果我的理解正确,您的文件是一个平面文件结构,包含页眉,数据/正文,页脚,其中每个记录/段都是定界记录。 Mule的平面文件阅读器将无法使用,因为它仅支持固定宽度的记录。您可以做的是将每组记录分成字符串,然后将每条记录读为csv。我可以在两个转换步骤中执行此操作,即转换1-读取文件并将有效载荷解析为字符串数组,转换2-将字符串数组转换为正确的json格式。请注意,此处可能会出现性能问题(如果您的平面文件太大),因为它将有效负载作为字符串保存在内存中。