jq - 使用参数构造选择器

Ami*_*mit 3 bash jq

我想知道是否可以使用参数来构造字段名称jq.

例:

jq -rc \
   --arg secret_name ${secret_name} \
   --arg secret_value ${secret_value} \
   '.data.$secret_name = "$secret_value"'
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想使用参数值secret_name来创建一个键.data.这可能用jq吗?

示例数据:

secret_name=abc  
secret_value=xyz 
Run Code Online (Sandbox Code Playgroud)

jq运行JSON :

{
    "apiVersion": "v1",
    "data": {},
    "kind": "Secret",
    "metadata": {
        "name": "kv-secrets",
        "namespace": "default"
    },
    "type": "Opaque"
} 
Run Code Online (Sandbox Code Playgroud)

预期产量:

{
    "apiVersion": "v1",
    "data": {
      "abc": "xyz"
    },
    "kind": "Secret",
    "metadata": {
        "name": "secrets"
    },
    "type": "Opaque"
}
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 6

使用变量,您需要使用长[...]形式的键.您不需要在JSON过滤器中引用变量; 变量字符串值.

jq -rc \
   --arg secret_name "${secret_name}" \
   --arg secret_value "${secret_value}" \
   '.data[$secret_name] = $secret_value'
Run Code Online (Sandbox Code Playgroud)

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