使用jq动态编辑json字符串

时间:2017-06-27 16:22:15

标签: json bash environment-variables sh jq

我可以使用jq工具将json结构动态编辑,在shell字符串中来回存储json数据。

例如我正在尝试的是在这个工作代码中添加一个字段:

echo '{"a":{"b":1}}' | jq -c '.a |= .+ {c:2}'
{"a":{"b":1,"c":2}}

但是使用像这样的shell功能:

jq_add () {
 eval $1=\"$(eval echo \$$1 | $JQ --argjson q1 "$(printf '\"%s\"'     "$2")" --argjson q2 "$(printf '\"%s\"' "$3")" '.[$q1] |= .+ $q2')\"
}

v='{"a":{"b":1}}'
jq_add v "a" "{c:2}"
echo $v

答案是: jq:error(at:1):object({“b”:1})和array([“{c:2}”])无法添加

1 个答案:

答案 0 :(得分:0)

我建议你采用一种明显不易出错的策略。我不确定任何这些的智慧,但以下内容实现了你似乎想要做的大部分事情。在任何情况下,请注意--argjson x v期望v有效JSON:{c:2}无效JSON。

#!/bin/bash

JQ=jq

function jq_add {
   $JQ --argjson q1 "$1"  --argjson q2 "$2"  '.[$q1] += $q2'
}


v='{"a":{"b":1}}'
v=$(echo "$v" | jq_add '"a"' '{"c":2}')
echo "$v"