如何在 bash 中使用 jq 制表嵌套的 JSON 列表

How tabulize nested JSON lists using jq in bash

我想将 JSON 文件中的数据解析为 tsv 文件,但我无法让它工作。

输入

{
  "images": [
    {
      "id": "592a77a5-614e-4ed8-b846-d4db1f27edbf",
      "name": "ubuntu",
      "tags": [
        "latest"
      ]
    },
    {
      "id": "592da7a5-614e-4ed8-b846-d4db1f27edbf",
      "name": "debian",
      "tags": [
        "latest",
        "10.0"
      ]
    }   
  ]
}

期望的输出

所需的输出是制表符分隔的 table

ubuntu    latest
debian    latest
debian    10.0

我试过的

# My data
echo '{"images":[{"id":"592a77a5-614e-4ed8-b846-d4db1f27edbf","name":"ubuntu","tags":["latest"]},{"id":"592da7a5-614e-4ed8-b846-d4db1f27edbf","name":"debian","tags":["latest","10.0"]}]}' > my.json

# My query
jq -r '.images | map({id} + (.tags | fromjson[])) | @tsv' my.json > my.tsv

首先我访问图像列表,然后我想对所有 id 进行操作,我想要标签。我从那里借了张地图,但是好像不行。我的查询和他们的查询之间的唯一区别是带有 .images.

的额外层

在进入标签之前将名称保存到变量中

jq -r '.images[] | .name as $name | .tags[] | [$name, .] | @tsv'
ubuntu  latest
debian  latest
debian  10.0

Demo