# Common JSON Path expressions

# What are JSONPath Expressions?

JSONPath expressions provide a powerful tool for querying and manipulating JSON data in your OpenAPI specifications. By using JSONPath, you can selectively target specific nodes in your API spec and apply modifications without altering the base structure

## Example JSONPath Expressions

* [All Post or Get Operations](#all-post-or-get-operations)
* [Operations with a Request Body](#operations-with-a-request-body)
* [Operations with a Specific Visibility Notation](#operations-with-a-specific-visibility-notation)
* [Inject Annotations as Siblings](#inject-annotations-as-siblings)

### All Post or Get Operations 

This expression selects all paths that contain either POST or GET operations. It's useful when you want to apply changes or add annotations specifically to these HTTP methods.

**JSONPath Target**

```
$.paths.*[?("post","get")]
```

**Overlay Action**

```yaml
actions:
  - target: $.paths.*[?("post","get")]
    update:
      x-apiture-logging: true
      description: "Logging enabled for all POST and GET operations."
```

### Operations with a Request Body

This targets all operations that include a request body. It's ideal for adding descriptions, examples, or additional schema validations to request bodies.

**JSONPath Target**

```
$.paths.*[?(@.requestBody)]
```

**Overlay Action**

```yaml
actions:
  - target: $.paths.*[?(@.requestBody)]
    update:
      x-custom-validation: "custom-validation-schema"
      description: "Custom validations applied to request bodies."

```

### Operations with a Specific Visibility Notation

This expression is used to find all operations marked with 'admin' visibility. It can be used to apply additional security measures or modify documentation for admin-only endpoints.

**JSONPath Target**

```
$.paths.*[?(@["x-visibility"] == "admin")]
```

**Overlay Action**

```yaml
actions:
  - target: $.paths.*[?(@["x-visibility"] == "admin")]
    update:
      x-custom-security: "enhanced"
      description: "Enhanced security for admin endpoints."
```

### Inject Annotations as Siblings

This expression targets all operations within an OpenAPI specification that have an `operationId` property.

**JSONPath Target**

```
$.paths.*.*[?(@.operationId)]
```

**Overlay Action**

```yaml
actions:
  - target: $.paths.*.*[?(@.operationId)]
    update:
      x-detailed-logging: "enabled"
      log_level: "verbose"
      description: "Verbose logging enabled for this operation to track detailed performance metrics."
```
