

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 键匹配
<a name="attribute-key-matching"></a>

在筛选策略中使用 `exists` 运算符根据特定属性是否存在来匹配传入的消息。
+ `exists` 仅适用于叶节点（结构中的最终属性）。
+ 它不适用于嵌套 JSON 结构中的中间节点。
+ 使用 `"exists": true` 匹配包含指定属性的传入消息。键值必须为非空值。

  例如，以下策略属性使用值为 `true` 的 `exists` 运算符：

  ```
  "store": [{"exists": true}]
  ```

  它匹配包含 `store` 属性键的任何消息属性列表，如下所示：

  ```
  "store": {"Type": "String", "Value": "fans"}
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  它还匹配以下任一消息正文：

  ```
  {
      "store": "fans"
      "customer_interests": ["baseball", "basketball"]
  }
  ```

  但是，它不匹配*不含* `store` 属性键的任何消息属性列表，如下所示：

  ```
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  它与以下消息正文也不匹配：

  ```
  {
      "customer_interests": ["baseball", "basketball"]
  }
  ```
+ 使用 `"exists": false` 匹配*不* 包含指定属性的传入消息。
**注意**  
`"exists": false` 仅在存在至少一个属性时才匹配。一组空的属性会导致筛选条件不匹配。

  例如，以下策略属性使用值为 `false` 的 `exists` 运算符：

  ```
  "store": [{"exists": false}]
  ```

  它*不* 匹配包含 `store` 属性键的任何消息属性列表，如下所示：

  ```
  "store": {"Type": "String", "Value": "fans"}
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  它与以下消息正文也不匹配：

  ```
  {
      "store": "fans"
      "customer_interests": ["baseball", "basketball"]
  }
  ```

  但是，它匹配*不含* `store` 属性键的任何消息属性列表，如下所示：

  ```
  "customer_interests": {"Type": "String.Array", "Value": "[\"baseball\", \"basketball\"]"}
  ```

  它还匹配以下消息正文：

  ```
  {
      "customer_interests": ["baseball", "basketball"]
  }
  ```