如何获取包含多个匹配项的查询的第一个索引?我想在此查询中获取名为 ELEMENT 的第一个键的值:
```
{
"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"
}
```
以下是产生此结果的cURL:
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")'
我原以为它可能是label[0]=="this.com"
,但我收到消息无法索引带数字的字符串
答案 0 :(得分:2)
看起来.value包含一个数组;如果是这样,那么与您的描述匹配的jq查询将是:
.value | map( select(.label=="this.com")) | .[0]
如果没有匹配,则会生成null
,因此您可能需要进行相应的调整。
如果你想在第一场比赛中获得.ELEMENT的值,你可以考虑:
.value | map( select(.label=="this.com")) | .[0] // empty | .ELEMENT
如果您的jq有first/1
,则可以采用更有效的解决方案:
first( .value[] | select(.label=="this.com") ) | . ELEMENT