【发布时间】:2020-10-26 14:46:43
【问题描述】:
我有一个 CSV 文件,我想将其转换为 JSON 文件,并在 shell 脚本中使用 JQ 删除 CSV 中的引号。
这是名为 input.csv 的 CSV:
1,"SC1","Leeds"
2,"SC2","Barnsley"
这是JQ的摘录:
jq --slurp --raw-input --raw-output \
'split("\n") | .[1:] | map(split(",")) |
map({
"ListElementCode": .[0],
"ListElement": "\(.[1]) \(.[2])
})' \
input.csv > output.json
这会写入 output.json:
[
{
"ListElementCode": "1",
"ListElement": "\"SC1\" \"Leeds\""
},
{
"ListElementCode": "2",
"ListElement": "\"SC2\" \"Barnsley\""
}
]
知道如何删除放入 ListElement 部分的 2 个文本值周围的引号吗?
【问题讨论】:
-
这是不幸的地方之一,jq 只支持原生 CSV 输出,而不支持原生 CSV 输入。当然,如果使用正则表达式函数,这是可行的;但它不是免费的,就像你使用 Python 和它的 csv 模块一样。
-
this writes to output.json是错误的假设,是语法错误 -
@GillesQuenot 为什么这是一个错误的假设?当我运行脚本时,它会创建该文件,并且我已经粘贴了输出供您查看。我不明白什么?
-
似乎适用于 perl、python ruby 和模板引擎(Template::Toolkit for perl,Jinja2 for Python)
-
csv to json using jq 值得审查,但我不相信我在那里看到的任何答案都真正符合 CSV 格式。