JQ
Since Camel 3.18
Camel supports JQ to allow using Expression or Predicate on JSON messages.
JQ Options
The JQ language supports 4 options, which are listed below.
Name | Default | Java Type | Description |
---|---|---|---|
| Name of header to use as input, instead of the message body It has as higher precedent than the propertyName if both are set. | ||
| Name of property to use as input, instead of the message body. It has a lower precedent than the headerName if both are set. | ||
| Sets the class of the result type (type from output). | ||
|
| Whether to trim the value to remove leading and trailing whitespaces and line breaks. |
Examples
For example, you can use JQ in a Predicate with the Content Based Router EIP.
from("queue:books.new")
.choice()
.when().jq(".store.book.price < 10)")
.to("jms:queue:book.cheap")
.when().jq(".store.book.price < 30)")
.to("jms:queue:book.average")
.otherwise()
.to("jms:queue:book.expensive");
Message body types
Camel JQ leverages camel-jackson
for type conversion. To enable camel-jackson POJO type conversion, refer to the Camel Jackson documentation.
Using header as input
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");
Camel supplied JQ Functions
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");
Dependencies
If you use Maven you could just add the following to your pom.xml
, substituting the version number for the latest and greatest release (see the download page for the latest versions).
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jq</artifactId>
<version>x.x.x</version>
</dependency>
Spring Boot Auto-Configuration
When using jq with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-jq-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
The component supports 4 options, which are listed below.
Name | Description | Default | Type |
---|---|---|---|
Whether to enable auto configuration of the jq language. This is enabled by default. | Boolean | ||
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 | ||
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 | ||
Whether to trim the value to remove leading and trailing whitespaces and line breaks. | true | Boolean |