【问题标题】:How to convert a JSON array to a CSV row? [closed]如何将 JSON 数组转换为 CSV 行? [关闭]
【发布时间】:2019-11-02 09:50:27
【问题描述】:

我正在尝试将大的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"}]
]
}

我想成为的人:

001,Robert,Pen,Paper,
002,Bruce,Pen,Computer,Headphones

我只需要数组的name

目前,结果是:

001,Robert,Pen
001,Robert,Paper
002,Bruce,Pen,
002,Bruce,Computer
002,Bruce,Headphones

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

【问题讨论】:

标签: json bash csv export-to-csv jq


【解决方案1】:
$ jq -r '.resources[] | [.id,.name,.items[].name] | @csv' < /tmp/b.json
"001","Robert","Pen","Paper"
"002","Bruce","Pen","Computer","Headphones"

【讨论】:

  • olirwin - 如果您不想要额外的引号,即使这意味着输出不是数据的有效 CSV 表示形式,您可以将结尾的 @csv 替换为 join(",")
【解决方案2】:

您可以使用 awk 来修复您当前的输出文件。

awk -F, '{a[$1","$2]=a[$1","$2]","$3}; END{for (v in a) print v a[v]}' in.txt | sort >out.txt

输入:

001,Robert,Pen
001,Robert,Paper
002,Bruce,Pen,
002,Bruce,Computer
002,Bruce,Headphones

输出:

001,Robert,Pen,Paper
002,Bruce,Pen,Computer,Headphones

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2017-09-07
    • 2012-08-25
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多