json_schema

Checks messages against a provided JSONSchema definition but does not change the payload under any circumstances. If a message does not match the schema it can be caught using error handling methods outlined here.

json_schema:
schema: ""
schema_path: ""

Please refer to the JSON Schema website for information and tutorials regarding the syntax of the schema.

Fields

schema

string A schema to apply. Use either this or the schema_path field.

schema_path

string The path of a schema document to apply. Use either this or the schema field.

parts

array An optional array of message indexes of a batch that the processor should apply to. If left empty all messages are processed. This field is only applicable when batching messages at the input level.

Indexes can be negative, and if so the part will be selected from the end counting backwards starting from -1.

Examples

With the following JSONSchema document:

{
"$id": "https://example.com/person.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string",
"description": "The person's first name."
},
"lastName": {
"type": "string",
"description": "The person's last name."
},
"age": {
"description": "Age in years which must be equal to or greater than zero.",
"type": "integer",
"minimum": 0
}
}
}

And the following Benthos configuration:

pipeline:
processors:
- json_schema:
schema_path: "file://path_to_schema.json"
- catch:
- log:
level: ERROR
message: "Schema validation failed due to: ${!error}"

If a payload being processed looked like:

{"firstName":"John","lastName":"Doe","age":-21}

Then the payload would be unchanged but a log message would appear explaining the fault. This gives you flexibility in how you may handle schema errors, but for a simpler use case you might instead wish to use the json_schema condition with a filter.