jq-为键名分配变量的值

时间:2020-10-05 05:27:56

标签: json jq

我有一个JSON对象 {"b":1,"c":2},并想通过名为xyz的键将该对象放在该对象下。

但是,键名来自shell变量。因此,换句话说,我首先需要获取密钥名称,然后在其下放{"b":1,"c":2},以便结果如下:

{
  "xyz": {
    "b": 1,
    "c": 2
  }
}

我提出了以下声明。它可以完成工作,但是想知道是否有消除临时new条目的更有效方法。

jq -n --arg a "xyz"  '{"b":1,"c":2} as $new | {$new} | with_entries(if .key == "new" then .key = $a else . end)'

1 个答案:

答案 0 :(得分:1)

您可以按照以下说明非常简单

jq -n --arg a "xyz" '{ ($a): { "b": 1 ,"c": 2 } }'

或包含标准输入内容

echo '{ "b": 1 ,"c": 2 }' | jq -n --arg a "xyz" '{ ($a): inputs }'

或不包含-n

echo '{ "b": 1 ,"c": 2 }' | jq --arg a "xyz" '{ ($a): . }'

或同时使用键名和对象可配置

jq -n --arg k "xyz" --argjson v '{ "b": 1 ,"c": 2 }' '{ ($k): $v }'