JQ / Bash 如何处理 JSON 响应中的空格?

问题描述 投票:0回答:1

我正在调用 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 无法解析,因为有空格

bash jq
1个回答
0
投票

响应不是有效的 JSON,因为字符串不允许包含换行符。这在https://www.ietf.org/rfc/rfc4627.txt中说明:

所有 Unicode 字符都可以放在引号内 除了必须转义的字符:引号, 反固相线和控制字符(U+0000 到 U+001F)。

换行符需要转义为

"\n"

在字符串中获得换行符的原因可能是因为您传递了

jq -r
标志(意思是“输出原始字符串,而不是 JSON 文本”)。

© www.soinside.com 2019 - 2024. All rights reserved.