web-dev-qa-db-ja.com

jq-文字列を文字列にインデックス付けできません

内容は

{
  "properties" : {
    "CloudSanityPassed" : [ "true" ],
    "GITCOMMIT" : [ "test1" ],
    "buildNumber" : [ "54" ],
    "jobName" : [ "InveergDB-UI" ]
  },
  "uri" : "http://ergctory:8081/aergergory/api/storage/test-reergerglease-reergpo/cergom/cloergud/waf/ergregBUI/1ergerggregSHOT/ergregerg-34.Zip"
}

私はこのコマンドを使用します

.[] | ."CloudSanityPassed" | .[]

そして、私はこのメッセージを受け取ります

jq: error (at <stdin>:8): Cannot index string with string "CloudSanityPassed"
"true"
exit status 5

必要なもの( "true"値)を取得しますが、出力にエラーがあります。私に、それを避ける方法と、それがなぜ起こるのか説明してもらえますか?

8
Ilya Bogomolnyy

jq manual によれば、.[]はオブジェクトに適用されたときにオブジェクトの値を取得します。

したがって、"properties"の値用と"uri"の値用の2つのオブジェクトを取得します。

{
  "CloudSanityPassed": [
    "true"
  ],
  "GITCOMMIT": [
    "test1"
  ],
  "buildNumber": [
    "54"
  ],
  "jobName": [
    "InveergDB-UI"
  ]
}
"http://ergctory:8081/aergergory/api/storage/test-reergerglease-reergpo/cergom/cloergud/waf/ergregBUI/1ergerggregSHOT/ergregerg-34.Zip"

jqは、."CloudSanityPassed"演算子を各オブジェクトに適用しようとします。

前のオブジェクトは辞書(別名ハッシュ)であるため、."CloudSanityPassed"を適用して["true"]の値を取得できますが、後者は."CloudSanityPassed"を適用できない単純な文字列なので、jqここにエラーを出力します。

たぶん、あなたが望むコマンドはただ.properties.CloudSanityPassedでしょう。

11
ymonad