環境変数で2つのJSONをリンクする方法は?

環境変数で2つのJSONをリンクする方法は?

JSONテキストを含む環境変数があります。jqツールを使用してデータを追加したいです。既存のフィールドをすべて保持しながら、新しいフィールドを追加および/または上書きしたいと思います。アイデアは変数にパスを追加するのと同じですPATHJSON

理解できない場合でも、作成方法と例を見てください。私が書いた値について

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処理できることです。次に、配列のすべての要素を一緒に追加するフィルタに渡すだけです。jqadd

オブジェクトがに追加されるとjqマージされ、追加操作の右側のオブジェクト(この場合は2つのオブジェクトの後者)に対して同じキーが検証されます。

ドキュメントを参照してください。

おすすめ記事