终端执行curl POST请求时jq报错data/0 is not defined问题咨询
问题原因
- 第一处错误:jq的过滤器表达式没有用单引号包裹
直接执行jq data.attributes.bearerToken时,Shell会解析表达式中的.符号,在部分环境下会被识别为路径分隔符,导致表达式被错误转译为data/attributes/bearerToken,jq无法识别该语法,因此抛出编译错误。正确写法需要用单引号将过滤器包裹,避免Shell提前解析表达式内容。 - 第二处错误:curl的进度输出污染了传入jq的数据流
你执行命令的返回中混有curl默认输出的下载进度信息,这部分非JSON内容会导致jq后续解析JSON失败,需要给curl增加-s(静默模式)参数关闭进度输出。
修正后的完整命令
curl -s --request POST -H 'Content-type: application/vnd.myapp.api+json' \ -H 'Authorization: Bearer $77777uTlmlHRfyoUj.$3333DZpH0XB0ER6W3Y.22227WYZZ6xSTQd/J5AvOqA1' \ -d '{"data":{"id":"mytoken","type":"jwtToken"}}' \ https://app.com/api/entities/users/apiTokens | \ jq '.data.attributes.bearerToken'
注:如果执行修正后的命令仍然返回
null,说明接口返回的JSON结构和你预期不符,可以先去掉管道后的jq命令直接打印curl返回结果,确认结构后再调整jq过滤器即可。
内容的提问来源于stack exchange,提问作者Leff
相关产品推荐
相关产品推荐

