如何将 JSON 数组转换为 CSV 行?

oli*_*win 1 csv bash json export-to-csv jq

我正在尝试将大JSON文件转换为某种CSV格式。(我刚刚学会了如何使用,jq所以我还是一个初学者)。

我已经成功地转换了大部分数据,但是,我被困在一个数组中。JSON文件中的每个对象都应该转换为CSV一行,但我无法让它工作。

我一直在尝试通过现有答案帮助自己: Convert/Export JSON to CSV

但问题是这种方法为数组中的每一项都写了一行,不必要地重复了信息。

我使用与上述答案相同类型的命令,唯一的区别是列的名称,但数组块...

例如,我可以有一个JSON类似的文件:

{resources:[
    {"id":"001","name"="Robert","items":[
        {"label":"00A","name":"Pen"},
        {"label":"00B","name":"Paper"}],
    {"id":"002","name"="Bruce","items":[
        {"label":"00A","name":"Pen"},
        {"label":"00B","name":"Computer"},
        {"label":"00C","name":"Headphones"}]
]
}
Run Code Online (Sandbox Code Playgroud)

我想成为:

001,Robert,Pen,Paper,
002,Bruce,Pen,Computer,Headphones
Run Code Online (Sandbox Code Playgroud)

我只需要name数组的列

目前,结果是:

001,Robert,Pen
001,Robert,Paper
002,Bruce,Pen,
002,Bruce,Computer
002,Bruce,Headphones
Run Code Online (Sandbox Code Playgroud)

问题是每个JSON对象的实际数组大约有 30 个项目,因此无法使用这种方式。

Yur*_*mke 5

$ jq -r '.resources[] | [.id,.name,.items[].name] | @csv' < /tmp/b.json
"001","Robert","Pen","Paper"
"002","Bruce","Pen","Computer","Headphones"
Run Code Online (Sandbox Code Playgroud)

  • olirwin - 如果您不想要额外的引号,即使这意味着输出不是您数据的有效 CSV 表示,您可以将尾随的 `@csv` 替换为 `join(",")`。 (2认同)