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

使用jq解析含'-'字符键的JSON值及动态获取服务器地址

解决jq处理带特殊字符键及动态获取对应值的问题

一、读取含'-'的键值

当键名包含'-'这类特殊字符时,不能使用点语法(.list.foo-beta.host),必须用方括号+字符串的形式,同时要将整个jq表达式用单引号包裹,避免shell解析特殊字符。正确命令如下:

jq '.list["foo-beta"].host' test.json

如果需要输出不带引号的原始字符串,加上-r参数:

jq -r '.list["foo-beta"].host' test.json

你之前尝试的写法报错,大概率是因为没给jq表达式加单引号,导致shell把方括号等字符当成特殊语法解析了。

二、动态获取currentServer对应的host

有两种可靠的实现方式:

方式1:直接用jq内部逻辑完成(推荐)

不需要借助shell变量,直接在jq里用.currentServer的值作为键匹配,一步到位:

jq -r '.list[.currentServer].host' test.json

这种方式最简洁,也避免了shell变量传递时的转义问题。

方式2:通过shell变量传递(适合需要复用currentServer值的场景)

  1. 先获取currentServer的原始值(-r参数确保输出不带引号):
CURR_SERVER=$(jq -r '.currentServer' test.json)
  1. 再用该变量获取对应host,推荐用jq的--arg参数传递变量,避免shell转义问题:
CURR_SERVER_URL=$(jq -r --arg s "$CURR_SERVER" '.list[$s].host' test.json)

如果不用--arg,也可以用双引号包裹jq表达式让shell展开变量,但要注意转义内部的引号:

CURR_SERVER_URL=$(jq -r ".list[\"$CURR_SERVER\"].host" test.json)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:30:59