如何使用jq解析多个匹配?

时间:2017-05-24 23:03:35

标签: json jq

如何获取包含多个匹配项的查询的第一个索引?我想在此查询中获取名为 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",但我收到消息无法索引带数字的字符串

1 个答案:

答案 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
相关问题