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

Ily*_*nyy 8 shell 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"
}
Run Code Online (Sandbox Code Playgroud)

我用这个命令

.[] | ."CloudSanityPassed" | .[]
Run Code Online (Sandbox Code Playgroud)

我得到了这个消息

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

我得到了,我想要的("真实"值),但输出中有错误.你能解释一下我,如何避免它,为什么会这样?

ymo*_*nad 11

根据jq手册,.[]在应用于对象时获取对象的值.

所以你得到两个对象,一个用于值,"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"
Run Code Online (Sandbox Code Playgroud)

jq尝试将."CloudSanityPassed"运算符应用于每个对象.

由于前一个对象是字典(也就是哈希),你可以应用."CloudSanityPassed"并获取值["true"],但是,后者是一个你不能应用的简单字符串."CloudSanityPassed",因此jq输出错误.

也许你想要的命令就是.properties.CloudSanityPassed.


小智 6

在我的情况下jq '[.[] | group_by(.foo)]'给出了错误但 jq '[.[]] | group_by(.foo)'有效

  • 呃,我假设 `.[]` 会返回一个_array_。但实际上它只是将每个对象的属性分隔为字符串。因此,用另一组括号括起来会创建一个数组 `[.[]]` DUH! (4认同)