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

在Bash中实现:根据字符串匹配JSON正则键并返回对应k字段值

Bash实现字符串匹配JSON正则键并返回对应k值

问题说明

给定如下JSON结构:

{
  "[A-Z]+": {
    "k": "test1", 
    "c": "stg1"
  }, 
  "[a-z]+": {
    "k": "test2", 
    "c": "stg2"
  }
}

需要在Bash中实现:传入一个字符串,检查该字符串是否匹配JSON中某个键的正则表达式,返回第一个匹配的键对应的k字段值。例如输入MAIN时,返回test1(匹配[A-Z]+正则)。

解决方案

利用jq工具将JSON对象转为键值对数组,再通过test函数用输入字符串匹配JSON中存储的正则键,最后提取第一个匹配项的k值。

方法1:从文件读取JSON

假设JSON内容已保存为rules.json,执行以下命令(替换INPUT_STR为目标字符串):

INPUT_STR="MAIN"
jq --arg str "$INPUT_STR" 'to_entries[] | select($str | test(.key)) | .value.k' rules.json | head -n 1

方法2:直接传入JSON字符串

如果JSON内容不需要保存到文件,可直接传入:

INPUT_STR="MAIN"
JSON='{
  "[A-Z]+": {
    "k": "test1", 
    "c": "stg1"
  }, 
  "[a-z]+": {
    "k": "test2", 
    "c": "stg2"
  }
}'
echo "$JSON" | jq --arg str "$INPUT_STR" 'to_entries[] | select($str | test(.key)) | .value.k' | head -n 1

关键逻辑解释

  • to_entries[]:将JSON对象转换为{"key": "正则表达式", "value": {...}}的数组并展开每个元素
  • select($str | test(.key)):筛选出输入字符串$str能匹配当前元素key(即JSON中存储的正则)的项
  • .value.k:提取匹配项的k字段值
  • head -n 1:确保只返回第一个匹配的结果

额外说明

  • test函数默认区分大小写,如需忽略大小写,可修改为test(.key; "i")
  • 若没有匹配的正则,命令无输出,可添加默认值处理,例如:
    INPUT_STR="Main"
    result=$(jq --arg str "$INPUT_STR" 'to_entries[] | select($str | test(.key)) | .value.k' rules.json | head -n 1)
    echo "${result:-default_value}"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:05:49