如何用jq在JSON文件中获取已知前一个键值对的下一组键值对
获取指定键的下一组键值对
你的原始JSON数据:
{ "entry1":"", "entry2":"", "entry3":"value3", "entry4":"value4", "entry5":"", "entry6":" ", "entry7":"", "entry8":"false" }
你当前的jq命令只能筛选出entry3的键值对,要拿到它的下一组(entry4及其值),可以用以下几种方式实现:
方式一:通过索引直接定位
这是最简洁的写法,利用数组索引找到目标键的位置后取后一位元素:
jq -r 'to_entries | .[(map(.key == "entry3") | index(true)) + 1] | .key, .value'
执行后会输出:
entry4 value4
如果想让输出格式更紧凑,比如entry4=value4,可以改成:
jq -r 'to_entries | .[(map(.key == "entry3") | index(true)) + 1] | "\(.key)=\(.value)"'
方式二:遍历匹配后取后续元素
如果需要更灵活的遍历逻辑(比如应对复杂的键顺序场景),可以用foreach遍历数组,找到entry3后捕获下一个元素:
jq -r 'to_entries | foreach .[] as $item ({found: false}; if .found then .result = $item | break elif $item.key == "entry3" then .found = true else . end; .result) | .key, .value'
核心逻辑说明
to_entries:将JSON对象转换为包含key和value字段的对象数组,方便按顺序操作map(.key == "entry3") | index(true):在数组中定位entry3对应的元素索引- 索引+1:直接获取目标键的下一个元素,再提取其
key和value
内容的提问来源于stack exchange,提问作者bessey
相关产品推荐
相关产品推荐

