我可以使用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}”])无法添加
答案 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"