使用jq修改JSON字段时含字母值报语法错误的原因求解
错误触发原因
- jq语法规则中,纯数字可以直接作为字面量使用,所以赋值为
44时可以正常执行。 44ab这类包含非数字字符的内容属于字符串类型,在jq表达式中必须用双引号包裹才会被识别为字符串字面量,没有引号的情况下jq会将其解析为未定义的标识符,因此抛出语法错误。- 直接在双引号包裹的jq表达式中嵌入shell变量
${PRIV_KEY},变量展开后对应的字符串没有被jq的双引号包裹,会触发相同的语法问题,若路径中包含特殊符号还会引发更严重的语法混乱。
正确实现方案
推荐使用jq的--arg参数传入shell变量,不需要手动处理引号嵌套,还可以规避特殊字符带来的语法问题,同时省略无用的cat管道直接读取文件,命令如下:
jq --arg priv_key "$PRIV_KEY" '.organizations.Org1MSP.adminPrivateKey.path |= $priv_key' explorer/connection-profile/test-network.json
如果一定要用直接嵌入变量的写法,需要对jq内部的字符串引号做转义,该写法容错性低不推荐使用:
jq ".organizations.Org1MSP.adminPrivateKey.path |= \"${PRIV_KEY}\"" explorer/connection-profile/test-network.json
内容的提问来源于stack exchange,提问作者K. Zhu
相关产品推荐
相关产品推荐

