jqはスラッシュを含むキーをどのように処理しますか?

jqはスラッシュを含むキーをどのように処理しますか?

私のテストjsonファイルは次のとおりです。

{
   "server":"xxx",
   "cert":"line1\nline2",
   "security/path": "/var/log/systems.log"
}

keyでフィルタリングしたいが、security/path次のいずれのコマンドも機能しません。

jq .security/path test.json
jq: error: path/0 is not defined at <top-level>, line 1:
.security/path
jq: 1 compile error

jq '.security/path' test.json同じ結果が表示されます。

答え1

~から基本フィルタ:

オブジェクト識別子インデックス:

...

キーに特殊文字が含まれている場合、または数字で始まる場合は、次のように二重引用符で囲む必要があります。."foo$"そうでなければ .["foo$"]

....

だから、

$ jq -r '."security/path"' test.json
/var/log/systems.log

答え2

出力が次のような場合、

  "annotations": {
    "eks.amazonaws.com/role-arn": "arn:aws:iam::907636088649:role/stg-eks_helm-chart",
    "meta.helm.sh/release-name": "helm-chart-base",
    "meta.helm.sh/release-namespace": "stg-helm-chart"
  }

以下はうまくいきます。

jq -r '.metadata.annotations["eks.amazonaws.com/role-arn"]'

次の出力が生成されます。

arn:aws:iam::907636088649:role/stg-eks_helm-chart

関連情報