2017-05-24 5 views
0

Wie erhalte ich den ersten Index einer Abfrage, die mehrere Übereinstimmungen enthält? Ich versuche, den Wert des ersten Schlüssels ELEMENT in dieser Abfrage genannt zu bekommen:Wie parse ich mehrere Matches mit jq?

``` 
{ 
    "ELEMENT": "FADC6B14-0369-4FF4-9ADC-A5E0F5C6D30D", 
    "type": "XCUIElementTypeStaticText", 
    "label": "this.com" 
} 
{ 
    "ELEMENT": "CC89DD73-AB90-495E-A90B-74722C56DD46", 
    "type": "XCUIElementTypeStaticText", 
    "label": "this.com" 
} 
{ 
    "ELEMENT": "B888ADA6-4209-44C4-BCB8-F5174312D102", 
    "type": "XCUIElementTypeStaticText", 
    "label": "this.com" 
} 
{ 
    "ELEMENT": "9A6E77C7-E93D-41DE-9163-2CB60B8DD2FB", 
    "type": "XCUIElementTypeStaticText", 
    "label": "this.com" 
} 
``` 

Hier ist die cURL, die dieses Ergebnis produziert:

curl -X POST $JSON_HEADER -d "{\"using\":\"partial link text\",\"value\":\"label=this.com\"}" $DEVICE_URL/session/$SESSION_ID/elements | jq -r '.value[] | select(.label=="this.com")' 

ich es sein könnte label[0]=="this.com" dachte aber Ich bekomme die Nachricht Kann nicht indizieren String mit der Nummer

+1

Unrelated, aber Verwenden Sie einfache Anführungszeichen ''{" mit ":" partieller Link-Test "," Wert ":" label = this.com "}'' oder '" $ (jq -n '{mit: "partieller Link-Test", Wert : "label = this.com"} ') "' um den JSON für das '-d' Argument zu erstellen. – chepner

Antwort

2

Es sieht aus wie .value enthält ein Array; wenn ja, dann ist die jq-Abfrage, die Ihre Beschreibung passt wäre:

.value | map(select(.label=="this.com")) | .[0] 

Wenn es keine Übereinstimmung gibt, diese null produzieren wird, so dass Sie entsprechende Anpassungen vornehmen möchten vielleicht.

Wenn Sie den Wert von .Element im ersten Spiel wollen, könnten Sie betrachten:

.value | map(select(.label=="this.com")) | .[0] // empty | .ELEMENT 

Wenn Ihr jq first/1 hat, eine effizientere Lösung ist möglich:

first(.value[] | select(.label=="this.com")) | . ELEMENT 
+0

Danke @peak! Der letzte Teil Ihrer Antwort löste das Problem. Das einzige, was mir immer noch nicht klar ist, ist das Entkommen mit dem Stichwort "leer" nach dem Index. [0] in deiner Antwort. Ich schaute auf https://stedolan.github.io/jq/manual/#map(x),map_values(x) und das brachte keine Klarheit. – JJacquet