2017-06-27 22 views
0

json構造をjqツールを使用してシェル文字列に前後に格納するように動的に編集可能にすることはできますか?私がしようとしていたものを例えばjqを使用した動的編集json文字列

は、この作業コードのような構造にフィールドを追加しました:

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

しかし、このようなシェルfucntionを使用して:

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:オブジェクト({ "B":1})と配列([ "{C:2}"])(:1で)エラーを添加することができない

答えて

0

Iが示唆よ大幅にエラーの少ない戦略を採用しています。私はこのうちのどれかの知恵についてはわかりませんが、あなたがしようとしていることのほとんどが次のように成し遂げられます。いずれにしても、--argjson x vvが有効であると予想しています。{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" 
+0

これはまさに私が探していたものです。ありがとうございました! – etjazz

関連する問題