You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq判断JSON中是否存在Sub1值为val2的条目?

用jq判断JSON中是否存在指定值的正确方法

错误原因

你的命令报错主要是两个问题:

  1. Shell解析干扰:$在Unix shell里是变量标识,你写的"My$Val"会被shell当成变量$Val展开(这个变量不存在的话就会变成空),导致jq实际收到的表达式是.[]."My".[]."Sub1",自然语法错误。
  2. jq语法错误:就算解决了shell的问题,.[]."My$Val".[]."Sub1"里的.[]多了个点,正确的数组遍历写法是."My$Val"[],不需要在键和[]之间加.。

满足需求的正确命令

要判断是否存在任意Sub1的值为val2,直接用jq的any()函数最简洁,返回true或false:

echo '[{"My$Val":[{"Sub1":"val1", "pld":"s"}]},{"My$Val":[{"Sub1":"val2", "pld":"q"}]}]' | jq 'any(.[]."My$Val"[]; .Sub1 == "val2")'

这个命令的逻辑是:遍历顶层数组的每个元素,再遍历每个元素里My$Val数组的项,只要有一项的Sub1等于val2,就返回true。

如果你想先提取所有Sub1的值再判断,也可以这么写:

echo '[{"My$Val":[{"Sub1":"val1", "pld":"s"}]},{"My$Val":[{"Sub1":"val2", "pld":"q"}]}]' | jq '.[]."My$Val"[]."Sub1" | any(. == "val2")'

重要提示

  • 当键名包含$、空格这类特殊字符时,必须用双引号把键名括起来,比如."My$Val"。
  • 把整个jq表达式用单引号包裹,能避免shell解析表达式里的特殊字符(比如$),这是Unix环境下用jq的常用技巧。

内容的提问来源于stack exchange,提问作者SecretIndividual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:32:49