如何使用 jq @CSV 过滤器生成包含不同 json 级别值的 csv 文件
How to use jq @CSV filter to generate a csv file with values from different json levels
我有一个来自 Spotify API 的 JSON 文件,其中列出了特定专辑中的所有歌曲。文件组织如下:
.
.name
.tracks.items
.tracks.items[]
.tracks.items[].artists
.tracks.items[].artists[].name
.tracks.items[].duration_ms
.tracks.items[].name
我正在使用 jq 创建一个包含以下信息的 csv:歌曲的艺术家、歌曲的标题和歌曲的持续时间。我可以使用以下语法执行此操作:
jq -r '.tracks.items[] | [.artists[].name, .name, .duration_ms] | @csv' myfile.json
输出:
"Michael Jackson","Wanna Be Startin' Somethin'",363400
"Michael Jackson","Baby Be Mine",260666
...
但是,我还想将 .name
下的值(代表歌曲来自的专辑的名称)添加到我的 csv 文件的每一行。看起来像这样的东西:
"Thriller","Michael Jackson","Wanna Be Startin' Somethin'",363400
"Thriller","Michael Jackson","Baby Be Mine",260666
...
是否可以使用@csv 过滤器来做到这一点?我可以通过像这样硬编码专辑名称来手动完成
jq -r '.tracks.items[] | ["Thriller", .artists[].name, .name, .duration_ms] | @csv' myfile.json
但我希望有更好的方法。
编辑:
文件如下所示:
{
"name": "Thriller",
"tracks": {
"items": [
{
"artists": [
{
"name": "Michael Jackson"
}
],
"duration_ms": 363400,
"name": "Wanna Be Startin' Somethin'"
},
{
"artists": [
{
"name": "Michael Jackson"
}
],
"duration_ms": 260666,
"name": "Baby Be Mine"
}
]
}
}
中的 "Variable / Symbolic Binding Operator" 部分
jq -r '
.name as $album_name ### <- THIS RIGHT HERE
| .tracks.items[]
| [$album_name, .artists[].name, .name, .duration_ms]
| @csv
' myfile.json
我有一个来自 Spotify API 的 JSON 文件,其中列出了特定专辑中的所有歌曲。文件组织如下:
.
.name
.tracks.items
.tracks.items[]
.tracks.items[].artists
.tracks.items[].artists[].name
.tracks.items[].duration_ms
.tracks.items[].name
我正在使用 jq 创建一个包含以下信息的 csv:歌曲的艺术家、歌曲的标题和歌曲的持续时间。我可以使用以下语法执行此操作:
jq -r '.tracks.items[] | [.artists[].name, .name, .duration_ms] | @csv' myfile.json
输出:
"Michael Jackson","Wanna Be Startin' Somethin'",363400
"Michael Jackson","Baby Be Mine",260666
...
但是,我还想将 .name
下的值(代表歌曲来自的专辑的名称)添加到我的 csv 文件的每一行。看起来像这样的东西:
"Thriller","Michael Jackson","Wanna Be Startin' Somethin'",363400
"Thriller","Michael Jackson","Baby Be Mine",260666
...
是否可以使用@csv 过滤器来做到这一点?我可以通过像这样硬编码专辑名称来手动完成
jq -r '.tracks.items[] | ["Thriller", .artists[].name, .name, .duration_ms] | @csv' myfile.json
但我希望有更好的方法。
编辑:
文件如下所示:
{
"name": "Thriller",
"tracks": {
"items": [
{
"artists": [
{
"name": "Michael Jackson"
}
],
"duration_ms": 363400,
"name": "Wanna Be Startin' Somethin'"
},
{
"artists": [
{
"name": "Michael Jackson"
}
],
"duration_ms": 260666,
"name": "Baby Be Mine"
}
]
}
}
jq -r '
.name as $album_name ### <- THIS RIGHT HERE
| .tracks.items[]
| [$album_name, .artists[].name, .name, .duration_ms]
| @csv
' myfile.json