使用 JQ 获得简单的分隔输出

使用 JQ 获得简单的分隔输出

如何扭转这一局面:

{
  "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
]

.[]提取这些值。

相关内容