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"
    }
  ]
}

"likeidentifier" == "英数字とアンダースコアで構成され、数字で始まらない。"

おすすめ記事