Rechercher

Ce contenu n'est pas disponible dans la langue sélectionnée.

Chapter 53. JQ

download PDF

Since Camel 3.18

Camel supports JQ to allow using Expression or Predicate on JSON messages.

53.1. Dependencies

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>

53.2. JQ Options

The JQ language supports 4 options, which are listed below.

NameDefaultJava TypeDescription

headerName

 

String

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

 

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.

resultType

 

String

Sets the class of the result type (type from output).

trim

true

Boolean

Whether to trim the value to remove leading and trailing whitespaces and line breaks.

53.3. 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");

53.4. Message body types

Camel JQ leverages camel-jackson for type conversion. To enable camel-jackson POJO type conversion, refer to the Camel Jackson documentation.

53.5. 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");

53.6. 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");

53.7. Spring Boot Auto-Configuration

The component supports 4 options, which are listed below.

NameDescriptionDefaultType

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

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.