shell jq -无法使用字符串索引字符串

332nm8kg  于 2023-01-31  发布在  Shell
关注(0)|答案(2)|浏览(246)

内容是

{
  "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

我得到了我想要的("真"值),但是在输出中有一个错误。你能解释一下,如何避免它,为什么会发生它?

k3bvogb1

k3bvogb11#

根据jq手册,.[]在应用于object时获得对象的值。
因此,您将获得两个对象,一个值为"properties",另一个值为"uri"

{
  "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

yacmzcpb

yacmzcpb2#

在我的例子中,jq '[.[] | group_by(.foo)]'给出了错误,但是jq '[.[]] | group_by(.foo)'工作正常

相关问题