You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq @CSV过滤器生成含多层级JSON值的CSV文件

用jq为Spotify专辑CSV添加专辑名

没问题!用jq的@csv过滤器完全能搞定这个需求,而且步骤很清晰,我给你拆解一下具体怎么做。

基础实现命令

假设你的Spotify专辑JSON结构大致是(.name对应专辑名,.tracks.items是歌曲列表),可以直接用这条命令:

jq -r '. as $album | .tracks.items[] | [$album.name, .artists[0].name, .name, .duration_ms] | @csv' input.json > output.csv

命令逐段解释

  • . as $album:把整个专辑的JSON对象存入变量$album,这样后续遍历每首歌时,能随时引用外层的专辑名
  • .tracks.items[]:遍历专辑里的每一首歌曲条目
  • [$album.name, .artists[0].name, .name, .duration_ms]:构造包含所需字段的数组:
    • $album.name:从变量中取出专辑名
    • .artists[0].name:取歌曲的第一位艺术家(Spotify歌曲可能有多个合作者,这里默认取第一个)
    • .name:歌曲标题
    • .duration_ms:歌曲时长(单位:毫秒)
  • @csv:将数组转换为标准CSV格式,自动处理包含逗号、引号的特殊文本,避免格式错误
  • -r:输出原始字符串(而非JSON格式的字符串),确保CSV内容不带多余的嵌套引号

适配多艺术家场景

如果你的歌曲有多个合作艺术家,想要把所有艺术家名字用逗号拼接展示,可以修改艺术家字段的处理逻辑:

jq -r '. as $album | .tracks.items[] | [$album.name, (.artists | map(.name) | join(", ")), .name, .duration_ms] | @csv' input.json > output.csv

这里用.artists | map(.name) | join(", ")把所有艺术家的名字提取出来,再拼接成一个字符串。

示例效果

假设你的输入JSON片段是:

{
  "name": "Midnights",
  "tracks": {
    "items": [
      {
        "name": "Lavender Haze",
        "artists": [{"name": "Taylor Swift"}],
        "duration_ms": 206866
      },
      {
        "name": "Maroon",
        "artists": [{"name": "Taylor Swift"}],
        "duration_ms": 218800
      }
    ]
  }
}

运行基础命令后生成的CSV内容:

"Midnights","Taylor Swift","Lavender Haze",206866
"Midnights","Taylor Swift","Maroon",218800

内容的提问来源于stack exchange,提问作者Hubert Léveillé Gauvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:30:55