web-dev-qa-db-fra.com

jq - Impossible d'indexer une chaîne avec une chaîne

Le contenu est

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

J'utilise cette commande

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

Et je reçois ce message

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

J'obtiens, ce que je veux ("vraie" valeur), mais il y a une erreur de sortie. Pourriez-vous m'expliquer comment l'éviter et pourquoi cela se produit-il?

8
Ilya Bogomolnyy

Selon le manuel jq , .[] obtient les valeurs de l'objet lorsqu'il est appliqué à l'objet.

Vous obtenez donc deux objets, un pour la valeur de "properties" et un autre pour la valeur de "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 essaie d'appliquer ."CloudSanityPassed" opérateur à chaque objet.

Étant donné que l'ancien objet est un dictionnaire (ou hachage), vous pouvez appliquer ."CloudSanityPassed" et obtenez la valeur ["true"], cependant, ce dernier est une chaîne simple que vous ne pouvez pas appliquer ."CloudSanityPassed", donc jq renvoie une erreur ici.

Peut-être que la commande que vous voulez est simplement .properties.CloudSanityPassed.

11
ymonad