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

如何检查指定字符串是否存在于JSON数组中?

问题分析与修正方案

原脚本存在几个关键问题:

  • keys变量存储的是jq输出的JSON数组字符串(比如["domain","password",...]),并非Shell数组,直接遍历"${keys[@]}"只会把整个JSON字符串作为单个元素处理
  • 条件判断[ "$key"== "$string" ]错误:key是Shell数组,不能直接与字符串比较;且==两侧必须加空格,否则会被解析为单个字符串
  • 未正确完成JSON数组到Shell数组的转换

修正后的脚本

# 目标检查列表
target_keys=("domain" "password" "root" "url" "user")

# 从Secret中提取data字段的键,转换为换行分隔的字符串,再转为Shell数组
mapfile -t secret_keys < <(kubectl get secret ssss --context rrrr -n test -o jsonpath='{$.data}' | jq -r '.[]')

# 遍历目标键,检查是否存在于Secret的键列表中
for key in "${target_keys[@]}"; do
    if printf '%s\n' "${secret_keys[@]}" | grep -qxF "$key"; then
        echo "键 '$key' 存在于Secret中"
    else
        echo "键 '$key' 不存在于Secret中"
    fi
done

关键说明

  1. JSON数组转Shell数组:用jq -r '.[]'将JSON数组的每个元素按换行输出,再通过mapfile -t直接读取为Shell数组secret_keys,避免手动解析JSON字符串的麻烦
  2. 存在性检查:用printf '%s\n' "${secret_keys[@]}"将数组元素逐行输出,配合grep -qxF精确匹配(-x整行匹配、-F固定字符串匹配、-q静默输出),高效判断键是否存在
  3. 变量命名优化:将原ad改为target_keys,key改为secret_keys,语义更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:50:26