基本的jq用法。如何获得嵌套价值

nul*_*ser 9 json key jq

这必须非常简单,但是手册页对我来说毫无意义。 curl example.com/json给我

{
 "stats": {
  "storage_server.disk_total": XXXXXXXXXX
 },
 "counters": {}
}
Run Code Online (Sandbox Code Playgroud)

我想提取XXXXXXXXXXdisk_total 的值。这样做的语法是什么?

jfs*_*jfs 10

要通过键获取深度嵌套的值:

$ jq '.. |."storage_server.disk_total"? | select(. != null)'
Run Code Online (Sandbox Code Playgroud)

..是零参数的快捷方式recurse——XPath//运算符的模拟。


pea*_*eak 9

  1. 对于学习如何构造jq查询,查看教程手册比“手册”页面更有用。还有一个常见问题解答
  2. 内部密钥名称中带有句点,因此.keyname不能使用简写形式。所以你可以这样写:

   .stats["storage_server.disk_total"] 
Run Code Online (Sandbox Code Playgroud)

或者您的jq允许它:

   .stats."storage_server.disk_total" 
Run Code Online (Sandbox Code Playgroud)

这些都是以下各项的缩写:

   .stats | .["storage_server.disk_total"] 
Run Code Online (Sandbox Code Playgroud)


Han*_* Z. 6

“storage_server.disk_total”中的点需要转义以防止它被解释为对象键分隔符。因此您可以使用:

jq '.stats."storage_server.disk_total"'
Run Code Online (Sandbox Code Playgroud)

假设这XXXXXXXXXX是您真实 JSON 中的有效 JSON 数字。