TL;DR
什么是jq相当于以下命令中的grep '"\/v6'
;
jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'
考虑以下 json;
{
"payload": {
"groups": [
{
"pattern": "/v6/",
"groups": [
{
"pattern": "something/",
"groups": [
{
"pattern": "somethingElse/",
"groups": [
{
"pattern": "{specialPattern:[0-9]+}/",
"groups": [],
"routes": [
{
"type": "variable",
"pattern": "/v6/notImportant/{specialPattern:[0-9]+}/",
"methods": {
json文件很大,有很多不相关的数据
我正在 try catch json 文件中的所有 .pattern
based on this question我创建了以下 jq 命令:
jq '.. .pattern? // empty' /tmp/all.json
这按预期工作,创建与此类似的输出;
"/v6/"
"something/"
"somethingElse/"
"{specialPattern:[0-9]+}/"
"/v6/notImportant/{specialPattern:[0-9]+}/"
问题:我如何仅选择以 /v6/
开头的每个 .pattern
?
我用过grep像这样
jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'
但是,必须有一个仅限 jq
的解决方案。
Google 教我有关 jq 的 contains
这似乎是某种相关问题的答案;
- How to filter an array of objects based on values in an inner array with jq?
- filter on "string contains"
- Print array element if it contains
不幸的是,我无法使其适合我的情况,因为使用 select
似乎没有必要。
最佳答案
要执行选择,您可以使用
select( test( "^/v6/" ) )
所以命令变成;
jq '.. .pattern? // empty | select(test("^/v6/"))' /tmp/all.json
或者类似地使用startswith
。
关于json - jq 按键递归搜索值,从,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63633913/