Filter jq:在任意位置按节点过滤

Filter jq:在任意位置按节点过滤,filter,jq,Filter,Jq,JSONPath有一个表达式,可以在任意位置按节点过滤$…node,类似于xpath中的//node。在jq中有什么方法可以做到这一点吗 以身作则 $curl-s'https://api.github.com/repos/stedolan/jq/commits?per_page=5“ 以下是JSONPath$…commit.committer的数据和结果: 如何在(/translate to)jq中执行相同的操作?这应该可以做到: [..|objects|.commit.committer//

JSONPath有一个表达式,可以在任意位置按节点过滤
$…node
,类似于
xpath
中的
//node
。在
jq
中有什么方法可以做到这一点吗

以身作则

$curl-s'https://api.github.com/repos/stedolan/jq/commits?per_page=5“

以下是JSONPath
$…commit.committer
的数据和结果:

如何在(/translate to)
jq中执行相同的操作?

这应该可以做到:

[..|objects|.commit.committer//empty]
  • ,
  • ,
  • ,
    • 这应该可以做到:

      [..|objects|.commit.committer//empty]
      
      • ,
      • ,
      • ,

      您要查找的函数是
      (这是
      递归
      函数的别名)

      您可以这样使用它:

      curl -s 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' \
         |jq 'map(..|.commit?.committer//empty)' 
      
      函数递归地遍历整个JSON路径,返回每个元素

      .commit?
      查找名为
      commit
      的字段,并删除另一个字段


      最后一部分选择
      committer
      对象,如果没有,则不显示
      null

      您要查找的函数是
      (这是
      递归
      函数的别名)

      您可以这样使用它:

      curl -s 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' \
         |jq 'map(..|.commit?.committer//empty)' 
      
      函数递归地遍历整个JSON路径,返回每个元素

      .commit?
      查找名为
      commit
      的字段,并删除另一个字段


      最后一部分选择
      committer
      对象,如果没有,则不显示
      null

      谢谢
      .commit?
      而不是
      对象
      可能适用于更广泛的情况,或者它们或多或少是等效的?@xpt
      .commit?
      查找所有内容中的
      commit
      字段,甚至字符串和整数<代码>?
只是防止显示错误并导致中断
objects |。commit
首先过滤对象,并在其中查找
commit
。它们是不等价的,我没有对两者进行基准测试,以确定哪一个更快,谢谢
.commit?
而不是
对象
可能适用于更广泛的情况,或者它们或多或少是等效的?@xpt
.commit?
查找所有内容中的
commit
字段,甚至字符串和整数<代码>?只是防止显示错误并导致中断
objects |。commit
首先过滤对象,并在其中查找
commit
。它们不是等价的,我并没有对两者进行基准测试,以确定哪一个更快,尽管你们的例子和OP的例子并不相似。在给定的示例中,失去第一级并不重要。您的示例与OP的示例不同。在给定的示例中,失去第一级并不重要。