Bash 将截断的JSON对象传递给jq时,数值文本无效

Bash 将截断的JSON对象传递给jq时,数值文本无效,bash,Bash,我收到了cURL的回复,如下所示: {"username": "bot", "verified": true, "locale": "en-US", "mfa_enabled": false, "bot": true, "id": "123", "flags": 0, "avatar": null, "discriminator": "3114", "email": null} 200 它存储在名为auth 然后我希望能够循环该对象,这样做: response=$(jq -c "." <

我收到了cURL的回复,如下所示:

{"username": "bot", "verified": true, "locale": "en-US", "mfa_enabled": false, "bot": true, "id": "123", "flags": 0, "avatar": null, "discriminator": "3114", "email": null} 200
它存储在名为
auth

然后我希望能够循环该对象,这样做:

response=$(jq -c "." <<< "${auth::-3}")
response=$(jq-c.“考虑:

response=$(jq -n --argjson auth "${auth% *}" '$auth')

…它可以正确地处理bash版本太旧而无法正确支持
${auth::-3}
(仅4.x版的功能),并且它还可以记录足够的详细信息,以跟踪在运行
bash-xyourscript

时传递给
jq
的内容引起的任何问题“否则,您只需删除最后一个空间后的所有内容,而不依赖于版本相关的特性(BASH 3 .x中不支持代码> ${Va::-3 } /代码>,在Mac OS之类的系统中,它们不愿意接受GPLV3许可)。BTW,您可以考虑<代码>响应= $(JQ-N)${Auth%*})。
相反,摆脱了herestring的用法——这样,使用
set-x
启用跟踪将向您显示传递给
jq
的确切字符串(以shell转义形式),从而可以更轻松地调试/比较您所期望的内容。太棒了,成功了!非常好。我发布了一个更偏执的版本(这不允许jq代码内容而不是JSON内容执行拒绝服务攻击)作为答案。