JSONテキストを含む環境変数があります。jq
ツールを使用してデータを追加したいです。既存のフィールドをすべて保持しながら、新しいフィールドを追加および/または上書きしたいと思います。アイデアは変数にパスを追加するのと同じですPATH
がJSON
。
理解できない場合でも、作成方法と例を見てください。私が書いた値について
echo "{\"A\":\"Hello world\"}" | jq -r
それでは、このオブジェクトを他のオブジェクトとマージしたいとしましょう。
echo "{\"A\":\"Goodbye world\", \"B\": \"This was a joke\"}"
ベストアンサー1
新しい値が古い値を完全に置き換えるので、あなたの例は奇妙です。元の値には1つのキー「A」のみがあり、「マージ」される値には、元の値を置き換えるキー「A」の別の値が含まれています。
したがって、説明のために、これらの入力が異なる順序で行われているとします(「Hello world」が「Goodbye world」よりも優先され、「This is a joke」は同じままです)。
次のことができます。
( echo "{\"A\":\"Goodbye world\", \"B\": \"This was a joke\"}" ; echo "{\"A\":\"Hello world\"}" ) | jq -s add
重要なのは、2つのjsonオブジェクトを順番に供給するので、配列にあるように-s
処理できることです。次に、配列のすべての要素を一緒に追加するフィルタに渡すだけです。jq
add
オブジェクトがに追加されるとjq
マージされ、追加操作の右側のオブジェクト(この場合は2つのオブジェクトの後者)に対して同じキーが検証されます。
ドキュメントを参照してください。