Json
使用 jq 在鍵可變時更改 json 中鍵的值
我有不想修改的 json 文件。問題是,目標鍵在 json 文件中有所不同。例如這兩個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
但是這樣 key 的值
bar1
將"something"
代替["something"]
. 寫出來的結果是{ "tasks": [{ "type": "type1", "params": { "get": "something", "foo": { "different1": "something" } } }] }
而不是我想要的:
{ "tasks": [{ "type": "type1", "params": { "get": "something", "foo": { "different1": ["something"] } } }] }
我很確定這對 jq 來說並不難,但我找不到解決方案。
關於什麼 … ?
jq --arg new "something" '.tasks[0].params.foo[] = [ $new] ' file
您可以在不訪問密鑰
with_entries(..)
的情況下使用和直接操作values[]
數組jq --arg new "something" '.tasks[0].params.foo |= with_entries(.value[] = $new)'