jqを使用してjsonのキー値を変更すると、キーは変更可能です。

jqを使用してjsonのキー値を変更すると、キーは変更可能です。

修正したくないjsonファイルがあります。問題は、jsonファイルのターゲットキーが異なることです。たとえば、次の2つのjsonは次のようになります。

{
    "tasks": [{
        "type": "type1",
        "params": {
            "get": "something",
            "foo": {
                "bar1": ["TEMPLATE"]
            }
        }
    }]
}

{
    "tasks": [{
        "type": "type1",
        "params": {
            "get": "something",
            "foo": {
                "different1": ["TEMPLATE"]
            }
        }
    }]
}

キー値を動的に変更したいですbar1different1キーパスはすべての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 

おすすめ記事