2017-05-08 1 views
1

Der Inhalt istjq - Kann nicht Index-String mit String

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

Ich verwende diesen Befehl

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

Und ich erhalte diese Mitteilung

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

ich, was ich will ("True" -Wert, aber es gibt einen Fehler in der Ausgabe. Kannst du mir erklären, wie ich es vermeiden kann und warum passiert das?

Antwort

3

Gemäß jq manual erhält .[] die Werte des Objekts, wenn es auf Objekt angewendet wird.

So erhalten Sie zwei Objekte, ein für den Wert des "properties" und ein anderer für den Wert des "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 versucht ."CloudSanityPassed" Operator auf jedes Objekt anwenden.

Da früheres Objektverzeichnis (auch bekannt als Hash) ist, Sie ."CloudSanityPassed" anwenden und den Wert ["true"] jedoch erhalten, letztere ist eine einfache Zeichenfolge, die Sie nicht ."CloudSanityPassed" anwenden können, so jq Ausgänge hier Fehler.

Vielleicht ist der gewünschte Befehl nur .properties.CloudSanityPassed.