Este conteúdo não está disponível no idioma selecionado.
Chapter 54. JQ
Since Camel 3.18
Camel supports JQ to allow using Expression or Predicate on JSON messages.
54.1. Dependencies Copiar o linkLink copiado para a área de transferência!
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>
54.2. JQ Options Copiar o linkLink copiado para a área de transferência!
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. |
54.3. Examples Copiar o linkLink copiado para a área de transferência!
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");
54.4. Message body types Copiar o linkLink copiado para a área de transferência!
Camel JQ leverages camel-jackson for type conversion. To enable camel-jackson POJO type conversion, refer to the Camel Jackson documentation.
54.5. Using header as input Copiar o linkLink copiado para a área de transferência!
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");
54.6. Camel supplied JQ Functions Copiar o linkLink copiado para a área de transferência!
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");
54.7. Spring Boot Auto-Configuration Copiar o linkLink copiado para a área de transferência!
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 |