如何在jq中检索json文件中的下一个键值对,当我知道前一个时

piah890a  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(145)

下面是JSON文件:

{
   "entry1":"",
   "entry2":"",
   "entry3":"value3",
   "entry4":"value4",
   "entry5":"",
   "entry6":" ",
   "entry7":"",
   "entry8":"false"
}

字符串
我知道entry3的键值对,但不知道下一个(entry4和value)。我如何访问它们?
现在,我被下面的命令卡住了:

jq -r 'to_entries[] | select(.value == "value3") | .key, .value'

p4tfgftt

p4tfgftt1#

你可以再次使用to_entries(作用于数组),在这种情况下,你会在.key字段中获得数字作为索引。使用select进行过滤,然后递增结果.key,并通过直接索引.[n]来获取该项目:

to_entries | .[
  to_entries[] | select(.value.value == "value3").key + 1
] | .key, .value

个字符
Demo
请注意,JSON对象中的条目在语义上没有顺序,即任何其他顺序都将被视为同一个对象。to_entries仅按表示顺序返回项目,这是您想要查询的内容,请注意,严格来说,这条信息不是JSON输入所传达的数据的一部分。
编辑:
我的目标是检索entry3和entry4的键值对
在这种情况下,您可以使用两个重叠项的窗口滑动to_entries返回的数组,例如使用while(. != []; .[1:])[:2]。然后,select像以前一样,但从该窗口中的first项,并最终输出firstlast项的数据:

to_entries | while(. != []; .[1:])[:2]
| select(first.value == "value3")
| first.key, first.value, last.key, last.value
entry3
value3
entry4
value4

的字符串
Demo

km0tfn4u

km0tfn4u2#

一个简单的方法:

to_entries
| range(0;length-1) as $n
| select( .[$n].key == "entry3" )
| .[$n:$n+2][]
| [.key, .value]

字符串
这产生

["entry3","value3"]
["entry4","value4"]


调整口味。

相关问题