2017-06-02 22 views
2

我想知道是否可以使用参数构造一个字段名称jqjq - 使用参数构造一个选择器

实施例:

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 

JSON在其上运行jq

{ 
    "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将会有更多的键值对。

+0

应该是什么样的最终结果? – RomanPerekhrest

回答

5

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

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

谢谢,这个作品! – Amit

+2

由于密钥可能包含空格,因此我认为值得注意的是在shell变量周围建议使用双引号以避免编译器错误。 –

相关问题