我正在调用 Azure DevOps API,并在 bash 脚本中使用 jq 解析响应。由于某种原因,JSON 响应包含换行形式的空格,jq 无法处理和解析它。
例如,我正在记录响应,它看起来像这样:
{"configuration":{"createdBy":{"displayName":"John
Smith","url":"", ..... etc `
jq 给了我这样的错误
jq:解析错误:第 2 行第 0 列 EOF 处未完成的字符串 jq:解析错误:第 2 行第 0 列的文字无效
它无法处理约翰和史密斯之间的空间
如何清理此响应以便 jq 可以处理它?
我的脚本:
checksResponse=$(curl -s -H "$headers" -X GET "$policyChecksUrl")
for check in $(echo "$checksResponse" | jq -r -c '.value[]'); do
echo $check
$(echo "$check" | jq -r '.configuration.id')
done
解析有效的 json 响应,jq 无法解析,因为有空格
响应不是有效的 JSON,因为字符串不允许包含换行符。这在https://www.ietf.org/rfc/rfc4627.txt中说明:
所有 Unicode 字符都可以放在引号内 除了必须转义的字符:引号, 反固相线和控制字符(U+0000 到 U+001F)。
换行符需要转义为
"\n"
。
在字符串中获得换行符的原因可能是因为您传递了
jq -r
标志(意思是“输出原始字符串,而不是 JSON 文本”)。