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

Bash环境下curl请求如何转义特殊字符避免JSON解析报错

问题原因

你遇到的JSON解析报错是因为直接将包含特殊字符的userPassword变量原样拼接进JSON请求体导致的:JSON语法要求字符串内的反斜杠\必须作为转义字符使用,你示例密码中的\5不属于JSON支持的合法转义序列,因此Elasticsearch返回400解析错误。

解决方案

推荐优先使用jq工具自动处理JSON特殊字符转义,这是shell场景下生成合法JSON的最佳实践,无需手动处理各类特殊字符。

步骤1 安装jq(如已安装可跳过)

  • Debian/Ubuntu 系:sudo apt install jq
  • CentOS/RHEL 系:sudo yum install jq

步骤2 修改后的代码

# 定义变量
keystorePassword="Password123"
userPassword="Password!/\5"
user="username"

# 调用jq自动生成转义后的合法JSON
json_body=$(jq -n --arg pwd "${userPassword}" '{"password": $pwd}')

# 发起curl请求
response=$(curl -s -u "elastic:${keystorePassword}" \
-XPOST "http://localhost:9200/_xpack/security/user/${user}/_password" \
-d "${json_body}" -H "Content-Type: application/json")
echo "Output: $response"

上述代码中jq会自动识别变量内的所有JSON特殊字符(反斜杠、双引号、换行符、控制字符等)并完成合规转义,适配所有合法密码场景。

轻量替代方案(无需安装jq,仅适配简单场景)

如果不想安装额外工具,也可以通过shell参数替换手动转义最常见的两个特殊字符:反斜杠和双引号:

# 先转义反斜杠,再转义双引号
escaped_pwd="${userPassword//\\/\\\\}"
escaped_pwd="${escaped_pwd//\"/\\\"}"

# 拼接JSON请求体
json_body="{\"password\":\"${escaped_pwd}\"}"

该方案仅能处理常规特殊字符,若密码包含换行、制表符等特殊字符仍会报错,仅推荐临时应急使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:54:04