添加 Bash 变量作为 JSON 对象的键

添加 Bash 变量作为 JSON 对象的键

我正在运行一个从 kubectl 提取 json 的命令,我需要获取该 json 并将其输入到另一个 json 数组中。

目前,我的命令如下所示

kubectl get ingress -o json | jq --arg context "$i" '{"$context":[{namespace: .items[].metadata.namespace, host: .items[].spec.rules[].host}]}'

但我的 json 响应如下 -

{
  "$context": [
    {
      "namespace": "test",
      "host": "test.test.com"
    }
  ]
}

我本质上希望我的 json 输出解析 $context 变量以包含 bash 变量 $i 的值,而不是字符串“$context”。感谢您的任何帮助!

答案1

在jq中构造对象时,关键是如果它不是“类似标识符”,必须括在括号中:

$ cat file
{"items":[{"metadata":{"namespace":"test"}, "spec":{"rules":[{"host":"test.test.com"}]}}]}

$ jq --arg context "foo" '{($context): [{namespace: .items[].metadata.namespace, host: .items[].spec.rules[].host}]}' file
# .........................^........^
{
  "foo": [
    {
      "namespace": "test",
      "host": "test.test.com"
    }
  ]
}

“类似标识符”==“由字母数字字符和下划线组成,并且不以数字开头”

相关内容