jq - 使用参数构造选择器

时间:2017-06-02 10:54:35

标签: bash jq

我想知道是否可以使用参数在jq中构建字段名称。

示例:

jq -rc \
   --arg secret_name ${secret_name} \
   --arg secret_value ${secret_value} \
   '.data.$secret_name = "$secret_value"'

在上面的示例中,我想使用参数secret_name的值在.data下创建一个键。这可以使用jq吗?

示例数据:

secret_name=abc  
secret_value=xyz 

运行jq的JSON:

{
    "apiVersion": "v1",
    "data": {},
    "kind": "Secret",
    "metadata": {
        "name": "kv-secrets",
        "namespace": "default"
    },
    "type": "Opaque"
} 

预期产出:

{
    "apiVersion": "v1",
    "data": {
      "abc": "xyz"
    },
    "kind": "Secret",
    "metadata": {
        "name": "secrets"
    },
    "type": "Opaque"
}

请注意,我打算运行原始命令来填充.data更多的键值对。

1 个答案:

答案 0 :(得分:6)

使用变量,您需要使用长[...]表单作为密钥。您不需要在JSON过滤器中引用变量;变量字符串值。

jq -rc \
   --arg secret_name "${secret_name}" \
   --arg secret_value "${secret_value}" \
   '.data[$secret_name] = $secret_value'