我正在使用jq
命令将“value”替换为JSON文件中的相应“key”。
在以下代码段中,我必须替换JSON对象v
中与密钥k
对应的node
值。
jq --arg flag "$node" \
--arg temp $v \
'(.[$flag]|.['$k'])|=$temp' properties.json > tempprop.json
问题是如果已经存在一个值,那么我需要传递一个空字符串作为值。但jq
解析器抛出异常说
jq: error: properties/0 is not defined at <top-level>, line 1:
properties.json
所以我不知道任何其他方式来处理这个问题,感谢任何帮助。
感谢。
答案 0 :(得分:2)
如果v
是空字符串,则需要引用其扩展名。您也应该通过变量传递$k
的值,而不是尝试插值。
jq --arg flag "$node" \
--arg temp "$v" \
--arg k1 "$k" \
'(.[$flag]|.[$k1])|=$temp' properties.json > tempprop.json
按原样,空$v
&#34;的未加引号扩展消失&#34;,jq
将过滤器视为该--arg
选项的第二个参数,留下{{ 1}}被解释为过滤器。