使用 jq 嵌套 JSON 与 TSV 的可变键
Nested JSON with variable keys to TSV using jq
我有以下带有可变关键字(lab001
、lab002
等)的嵌套 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
我有以下带有可变关键字(lab001
、lab002
等)的嵌套 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