使用 jq 嵌套 JSON 与 TSV 的可变键

Nested JSON with variable keys to TSV using jq

我有以下带有可变关键字(lab001lab002 等)的嵌套 JSON 文件 labs.json,我想将其转换为 TSV 使用jq:

{
  "lab001": {
    "tags": {
      "T1": [],
      "T2": ["k26","e23"],
      "T3": ["s92"]
    },
    "code": "8231"
  },
  "lab002": {
    "tags": {
      "T1": ["t32","y55"],
      "T2": ["q78"],
      "T3": ["b24"]
    },
    "code": "9112"
  }
}

结果 table 应如下所示:

ID T1 T2 T3
lab001 k26,e23 s92
lab002 t32,y55 q78 b24

目前我正在使用一种相当行人的方法,粘贴两个 jq 调用并使用 tr:

进行一些清理
paste <(jq -r 'keys_unsorted | @csv' labs.json | tr ',' '\n') <(jq -r '.[].tags | map(tostring) | @tsv' labs.json) | tr -d '[]"'

有没有更优雅的方法来完全使用 jq 完成此操作?

用逗号连接每个标签的元素,将结果字符串放入一个数组中,并将实验室 ID 作为第一个元素,然后将其通过管道传递给 @tsv 过滤器,如下所示:

keys_unsorted[] as $id | [$id, (.[$id].tags[] | join(","))] | @tsv

Online demo