提问人:bessey 提问时间:11/14/2023 最后编辑:tripleeebessey 更新时间:11/17/2023 访问量:79
当我知道上一个键值对时,如何使用 jq 检索 json 文件中的下一个键值对
How to retrieve the next key value pair in a json file with jq when I know the previous one
问:
我有以下JSON文件:
{
"entry1":"",
"entry2":"",
"entry3":"value3",
"entry4":"value4",
"entry5":"",
"entry6":" ",
"entry7":"",
"entry8":"false"
}
我知道 entry3 的键值对,但不知道下一个键值对(entry4 和 value)。 如何访问它们?
目前,我被困在以下命令上:
jq -r 'to_entries[] | select(.value == "value3") | .key, .value'
答:
1赞
pmf
11/14/2023
#1
您可以再次使用(作用于数组),在这种情况下,您将获得数字作为字段中的索引。使用 进行过滤,然后递增结果,并通过直接索引获取该项目:to_entries
.key
select
.key
.[n]
to_entries | .[
to_entries[] | select(.value.value == "value3").key + 1
] | .key, .value
entry4
value4
请注意,JSON 对象中的条目在语义上没有顺序,即任何其他排序都将被视为同一对象。 只是按表示顺序返回项目,这是您要查询的内容,请注意,严格来说,这条信息不是 JSON 输入传达的数据的一部分。to_entries
编辑:
我的目标是检索 entry3 和 entry4 的键值对
在这种情况下,您可以使用两个重叠项的窗口滑动返回的数组,例如使用 .然后,像以前一样,但从该窗口中的项,并最终从 和 项输出数据:to_entries
while(. != []; .[1:])[:2]
select
first
first
last
to_entries | while(. != []; .[1:])[:2]
| select(first.value == "value3")
| first.key, first.value, last.key, last.value
entry3
value3
entry4
value4
1赞
peak
11/15/2023
#2
一种直接的方法:
to_entries
| range(0;length-1) as $n
| select( .[$n].key == "entry3" )
| .[$n:$n+2][]
| [.key, .value]
这会产生
["entry3","value3"]
["entry4","value4"]
根据口味进行调整。
评论
0赞
bessey
11/16/2023
这在我这边不起作用
0赞
peak
11/17/2023
我已经验证了它使用多个版本的 jq 工作。您是否尝试过将 jq 程序放入文件中?
0赞
bessey
11/17/2023
我从jqplay网站进行了测试,它不起作用,结果是空的
0赞
peak
11/17/2023
它适用于 jqplay,如下所示: jqplay.org/s/Oehcc4wqmh1
评论
"entry4"
"entry3"