如何扭转这一局面:
{
"write": {
"out": 0,
"available": 128,
"totalTickets": 128
},
"read": {
"out": 7,
"available": 249,
"totalTickets": 256
}
}
进入
0 128 128 7 249 256
用jq吗?
答案1
您还可以像这样递归地降低 JSON 树:
>jq 'recurse|numbers' data.json
0
128
128
7
249
256
(这假设你的所有值都是数字, 使用标量如果您还想要布尔值和字符串)
或者使用简写符号递归,即..
..|numbers
(谢谢@cuonglm!)
请注意,与地图|展平方法这也适用于任意嵌套的对象树。
例如
{
"write": {
"out": 0,
"available": 128,
"totalTickets": 128
},
"read": {
"out": 7,
"available": 249,
"totalTickets": 256,
"details" : {
"good": 10,
"bad" : 20
}
}
}
将产生:
0
128
128
7
249
256
10
20
答案2
$ jq 'map(map(values))|flatten|.[]' data.json
0
128
128
7
249
256
第一部分生成
[
[
0,
128,
128
],
[
7,
249,
256
]
]
这被扁平化为:
[
0,
128,
128,
7,
249,
256
]
并.[]
提取这些值。