Bash中API返回JSON单斜杠解析失败,jq删除字段无效求助
解决API返回非法JSON(含单反斜杠)的处理方案
问题根源
API返回的JSON里存在未转义的单个反斜杠(\),这违反了JSON语法规范(JSON要求反斜杠必须转义为\\),导致jq无法正常解析整个JSON结构,所以你之前直接用jq执行删除format字段的命令会失效。
方案1:先修复JSON合法性,再用jq删除字段
先用sed把所有单反斜杠替换成双反斜杠,让JSON变成合法格式,再用jq处理:
SPECIAL_SERVICES_RESPONSE=$(curl -s -X GET -H "Authorization: Bearer ${BEARER_TOKEN}" "${SPECIAL_SERVICES_URL}" | sed 's/\\/\\\\/g' | jq '[.[].inputParameterRules[] | del(.format)]')
- 细节:
sed 's/\\/\\\\/g'会将每个\替换为\\,修复JSON的语法问题,之后jq就能正常解析并执行删除format字段的操作。
方案2:直接用sed删除format字段(跳过JSON修复)
如果你的目标只是删除format字段,可以直接用sed定位并移除该字段,不需要先修复JSON:
# 匹配并删除"format": "xxx"格式的字段(适用于字段值不含双引号的情况) SPECIAL_SERVICES_RESPONSE=$(curl -s -X GET -H "Authorization: Bearer ${BEARER_TOKEN}" "${SPECIAL_SERVICES_URL}" | sed '/"format": "[^"]*"/d')
如果format字段嵌套在inputParameterRules下且格式有换行/空格,可以用更精准的匹配:
# 仅删除inputParameterRules块内的format字段 SPECIAL_SERVICES_RESPONSE=$(curl -s -X GET -H "Authorization: Bearer ${BEARER_TOKEN}" "${SPECIAL_SERVICES_URL}" | sed '/"inputParameterRules"/,/]/ s/"format":.*//')
方案3:用jq raw模式预处理(进阶)
如果非法反斜杠仅出现在format字段的值里,可以用jq的原始输入模式先处理字符串,再解析:
SPECIAL_SERVICES_RESPONSE=$(curl -s -X GET -H "Authorization: Bearer ${BEARER_TOKEN}" "${SPECIAL_SERVICES_URL}" | jq -R 'gsub("\\\\"; "\\\\\\\\")' | jq -s '.' | jq '[.[].inputParameterRules[] | del(.format)]')
- 细节:
jq -R以原始字符串读取每行内容,gsub完成反斜杠转义,jq -s '.'将处理后的所有行合并为一个合法JSON结构,最后再用jq执行删除操作。
内容的提问来源于stack exchange,提问作者RKGupta
相关产品推荐
相关产品推荐

