Chapter 49. JQ
Since Camel 3.18
Camel supports JQ to allow using Expression or Predicate on JSON messages.
49.1. Dependencies Copy linkLink copied to clipboard!
When using jq with Red Hat build of Camel Spring Boot, use the following Maven dependency to have support for auto configuration:
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jq-starter</artifactId> </dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-jq-starter</artifactId>
</dependency>
49.2. JQ Options Copy linkLink copied to clipboard!
The JQ language supports 4 options, which are listed below.
| Name | Default | Java Type | Description |
|---|---|---|---|
| headerName |
| Name of header to use as input, instead of the message body It has as higher precedent than the propertyName if both are set. | |
| propertyName |
| Name of property to use as input, instead of the message body. It has a lower precedent than the headerName if both are set. | |
| resultType |
| Sets the class of the result type (type from output). | |
| trim |
|
| Whether to trim the value to remove leading and trailing whitespaces and line breaks. |
49.3. Examples Copy linkLink copied to clipboard!
For example, you can use JQ in a Predicate with the Content Based Router EIP.
49.4. Message body types Copy linkLink copied to clipboard!
Camel JQ leverages camel-jackson for type conversion. To enable camel-jackson POJO type conversion, refer to the Camel Jackson documentation.
49.5. Using header as input Copy linkLink copied to clipboard!
By default, JQ uses the message body as the input source. However, you can also use a header as input by specifying the headerName option.
For example to count the number of books from a JSON document that was stored in a header named books you can do:
from("direct:start")
.setHeader("numberOfBooks")
.jq(".store.books | length", int.class, "books")
.to("mock:result");
from("direct:start")
.setHeader("numberOfBooks")
.jq(".store.books | length", int.class, "books")
.to("mock:result");
49.6. Camel supplied JQ Functions Copy linkLink copied to clipboard!
The camel-jq adds the following functions:
-
header- Allow to access the Message header in a JQ expression.
For example, to set the property foo with the value from the Message header `MyHeader':
from("direct:start")
.transform()
.jq(".foo = header(\"MyHeader\")")
.to("mock:result");
from("direct:start")
.transform()
.jq(".foo = header(\"MyHeader\")")
.to("mock:result");
49.7. Spring Boot Auto-Configuration Copy linkLink copied to clipboard!
The component supports 4 options, which are listed below.
| Name | Description | Default | Type |
|---|---|---|---|
| camel.language.jq.enabled | Whether to enable auto configuration of the jq language. This is enabled by default. | Boolean | |
| camel.language.jq.header-name | Name of header to use as input, instead of the message body It has as higher precedent than the propertyName if both are set. | String | |
| camel.language.jq.property-name | Name of property to use as input, instead of the message body. It has a lower precedent than the headerName if both are set. | String | |
| camel.language.jq.trim | Whether to trim the value to remove leading and trailing whitespaces and line breaks. | true | Boolean |