
修正したくないjsonファイルがあります。問題は、jsonファイルのターゲットキーが異なることです。たとえば、次の2つのjsonは次のようになります。
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"bar1": ["TEMPLATE"]
}
}
}]
}
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": ["TEMPLATE"]
}
}
}]
}
キー値を動的に変更したいですbar1
。different1
キーパスはすべてのjsonで一定であるため、jqを使用すると次のようになります。
jq '.tasks[0].params.foo' my_json_file.json
次のコードを試しました。
new_value="something"
jq --arg new "$new_value" '.tasks[0].params.foo[] = $new' my_json_file.json
ただし、この方法ではキー値が置き換えられますbar1
。記録された結果は次のとおりです。"something"
["something"]
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": "something"
}
}
}]
}
私が望むものの代わりに:
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": ["something"]
}
}
}]
}
jqではこれは難しくないと確信していますが、解決策を見つけることができません。
答え1
何について...?
jq --arg new "something" '.tasks[0].params.foo[] = [ $new] ' file
答え2
キーにアクセスせずにwith_entries(..)
配列を使用して直接操作できます。values[]
jq --arg new "something" '.tasks[0].params.foo |= with_entries(.value[] = $new)'