如何在 macOS 的 BSD 终端上将带有段落的 CSV 转换为 JSON?

如何在 macOS 的 BSD 终端上将带有段落的 CSV 转换为 JSON?

我有一个巨大的文本文件,其中包含以下结构:

title;description;date

问题是descriptionmain 包含段落,例如:

title;description;data
MyText;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam est dolor, molestie a rhoncus vel, congue sed diam. Vestibulum pellentesque libero eleifend dolor finibus vestibulum. Curabitur at suscipit tellus, at viverra ex. Nulla sem nibh, laoreet a porta a, convallis ac augue. Aliquam diam sapien, rutrum sed nulla lobortis, hendrerit rutrum diam. Donec tellus quam, maximus at mollis sit amet, consequat eget orci. Duis id vestibulum metus. Nulla convallis tortor diam, a tempus quam mollis sed. Aliquam at fermentum nibh, quis sodales orci. Maecenas viverra ultrices lobortis. Morbi viverra, tortor in mattis tincidunt, augue erat condimentum leo, a dignissim nulla lacus ac augue. Sed tincidunt rutrum sapien, sodales commodo sapien. Sed ultrices, augue vitae porta viverra, eros magna pellentesque leo, in bibendum enim enim non nulla. Nullam vel venenatis leo.

Sed sed vulputate nulla. Nullam hendrerit justo quis ante aliquet ullamcorper. Praesent at rhoncus ipsum, in sodales felis. Nam eu ante accumsan urna tempus rutrum at in felis. Maecenas eleifend enim nec augue eleifend, ut sagittis leo tincidunt. In non felis pretium, accumsan mi sit amet, hendrerit lectus. Nullam auctor mi non ligula aliquam commodo. Nunc mollis consequat purus, sit amet rutrum elit sodales sit amet. Suspendisse potenti. Ut a tempor urna. Etiam vitae venenatis ex.

Nunc ut mattis nibh. Morbi varius accumsan purus, vel facilisis eros suscipit id. Sed non accumsan arcu, pretium pulvinar urna. Quisque a neque faucibus, condimentum velit eget, varius lorem. Duis varius iaculis ullamcorper. Maecenas vitae fringilla mi, ultrices finibus justo. Suspendisse vel nibh tortor. Nullam ullamcorper justo augue, molestie lacinia lorem varius et. Etiam sed pulvinar metus, ac euismod arcu. Morbi laoreet dolor volutpat, tempor nunc sit amet, lobortis ipsum. Quisque posuere commodo sollicitudin. Vivamus consectetur ligula sed ante tristique congue. Duis faucibus lacus tellus, sed consectetur purus ornare vitae.;2023-07-12

如何使用 macOS 终端将其转换为 JSON?

注意:由于敏感数据,我不想使用在线转换器。

我尝试过类似的东西

ruby -r json -r csv -e 'puts CSV.parse(STDIN, headers:true).map(&:to_h).to_json' < myFile.csv > myFile.json

但这些都失败了。我怀疑是因为他们将段落中的换行符解释为 CSV 行的结尾和下一行的开头。

当我执行 a 时,cat -e myFile.csv我看到$为行和段落内的分隔符的标记。一样的标记!

当我fileCSV我看到

Unicode text, UTF-8 text, with very long lines, with CRLF line terminators

我不知道该怎么做。

谢谢

答案1

主要问题是您的 CSV 错误。您应该在内部有回车符的单元格中使用双引号分隔符(下面的示例)。

使用磨坊主,以及您可以运行的正确 CSV

mlr --c2j --ifs ";" cat input.csv

要得到

{ "title": "MyText", "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam est dolor, molestie a rhoncus vel, congue sed diam. Vestibulum pellentesque libero eleifend dolor finibus vestibulum. Curabitur at suscipit tellus, at viverra ex. Nulla sem nibh, laoreet a porta a, convallis ac augue. Aliquam diam sapien, rutrum sed nulla lobortis, hendrerit rutrum diam. Donec tellus quam, maximus at mollis sit amet, consequat eget orci. Duis id vestibulum metus. Nulla convallis tortor diam, a tempus quam mollis sed. Aliquam at fermentum nibh, quis sodales orci. Maecenas viverra ultrices lobortis. Morbi viverra, tortor in mattis tincidunt, augue erat condimentum leo, a dignissim nulla lacus ac augue. Sed tincidunt rutrum sapien, sodales commodo sapien. Sed ultrices, augue vitae porta viverra, eros magna pellentesque leo, in bibendum enim enim non nulla. Nullam vel venenatis leo.\n\nSed sed vulputate nulla. Nullam hendrerit justo quis ante aliquet ullamcorper. Praesent at rhoncus ipsum, in sodales felis. Nam eu ante accumsan urna tempus rutrum at in felis. Maecenas eleifend enim nec augue eleifend, ut sagittis leo tincidunt. In non felis pretium, accumsan mi sit amet, hendrerit lectus. Nullam auctor mi non ligula aliquam commodo. Nunc mollis consequat purus, sit amet rutrum elit sodales sit amet. Suspendisse potenti. Ut a tempor urna. Etiam vitae venenatis ex.\n\nNunc ut mattis nibh. Morbi varius accumsan purus, vel facilisis eros suscipit id. Sed non accumsan arcu, pretium pulvinar urna. Quisque a neque faucibus, condimentum velit eget, varius lorem. Duis varius iaculis ullamcorper. Maecenas vitae fringilla mi, ultrices finibus justo. Suspendisse vel nibh tortor. Nullam ullamcorper justo augue, molestie lacinia lorem varius et. Etiam sed pulvinar metus, ac euismod arcu. Morbi laoreet dolor volutpat, tempor nunc sit amet, lobortis ipsum. Quisque posuere commodo sollicitudin. Vivamus consectetur ligula sed ante tristique congue. Duis faucibus lacus tellus, sed consectetur purus ornare vitae.", "data": "2023-07-12" }

正确的 CSV

title;description;data
MyText;"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam est dolor, molestie a rhoncus vel, congue sed diam. Vestibulum pellentesque libero eleifend dolor finibus vestibulum. Curabitur at suscipit tellus, at viverra ex. Nulla sem nibh, laoreet a porta a, convallis ac augue. Aliquam diam sapien, rutrum sed nulla lobortis, hendrerit rutrum diam. Donec tellus quam, maximus at mollis sit amet, consequat eget orci. Duis id vestibulum metus. Nulla convallis tortor diam, a tempus quam mollis sed. Aliquam at fermentum nibh, quis sodales orci. Maecenas viverra ultrices lobortis. Morbi viverra, tortor in mattis tincidunt, augue erat condimentum leo, a dignissim nulla lacus ac augue. Sed tincidunt rutrum sapien, sodales commodo sapien. Sed ultrices, augue vitae porta viverra, eros magna pellentesque leo, in bibendum enim enim non nulla. Nullam vel venenatis leo.

Sed sed vulputate nulla. Nullam hendrerit justo quis ante aliquet ullamcorper. Praesent at rhoncus ipsum, in sodales felis. Nam eu ante accumsan urna tempus rutrum at in felis. Maecenas eleifend enim nec augue eleifend, ut sagittis leo tincidunt. In non felis pretium, accumsan mi sit amet, hendrerit lectus. Nullam auctor mi non ligula aliquam commodo. Nunc mollis consequat purus, sit amet rutrum elit sodales sit amet. Suspendisse potenti. Ut a tempor urna. Etiam vitae venenatis ex.

Nunc ut mattis nibh. Morbi varius accumsan purus, vel facilisis eros suscipit id. Sed non accumsan arcu, pretium pulvinar urna. Quisque a neque faucibus, condimentum velit eget, varius lorem. Duis varius iaculis ullamcorper. Maecenas vitae fringilla mi, ultrices finibus justo. Suspendisse vel nibh tortor. Nullam ullamcorper justo augue, molestie lacinia lorem varius et. Etiam sed pulvinar metus, ac euismod arcu. Morbi laoreet dolor volutpat, tempor nunc sit amet, lobortis ipsum. Quisque posuere commodo sollicitudin. Vivamus consectetur ligula sed ante tristique congue. Duis faucibus lacus tellus, sed consectetur purus ornare vitae.";2023-07-12

相关内容