Filter jq:在任意位置按节点过滤
JSONPath有一个表达式,可以在任意位置按节点过滤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//
$…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的示例不同。在给定的示例中,失去第一级并不重要。