camel-language-jsonpath 0.5.7

JSONPath Language for rust-camel (RFC 9535)
Documentation

camel-language-jsonpath

JSONPath Language for rust-camel YAML DSL

Overview

camel-language-jsonpath implements RFC 9535 JSONPath — a query language for extracting values from JSON data.

Supported JSONPath Syntax

Syntax Description Example
$ Root node $
.field Child member $.store.name
['field'] Child member (quoted) $['store']['name']
[index] Array index $.items[0]
[start:end] Array slice $.items[0:5]
[*] Wildcard (all items) $.items[*]
..field Descendant (deep scan) $..price
?() Filter expression $.items[?(@.price > 10)]
, Union (multiple names/indices) $.items[0,2,4]
() Script expression $.items[(@.length - 1)]

Note: JSONPath expressions operate on the message body. The body must be JSON or coercible to JSON. Text bodies containing valid JSON strings are automatically parsed.

Feature Enablement

Enable in Cargo.toml:

[dependencies.camel-core]
version = "0.5"
features = ["lang-jsonpath"]

YAML DSL Usage

Filter

routes:
  - id: "filter-high-price"
    from: "direct:orders"
    filter:
      jsonpath: "$.items[?(@.price > 100)]"
    steps:
      - to: "log:high-value"

Set Header

routes:
  - id: "set-header-from-json"
    from: "direct:data"
    set-header:
      name: "customer-id"
      expression:
        language: "jsonpath"
        expression: "$.customer.id"
    steps:
      - to: "log:info"

Set Body

routes:
  - id: "set-body-from-json"
    from: "direct:data"
    set-body:
      expression:
        language: "jsonpath"
        expression: "$.result"
    steps:
      - to: "log:info"

Log

routes:
  - id: "log-json-value"
    from: "direct:data"
    log:
      message: "Price: ${jsonpath:$.price}"
      logging-level: "info"

Split

routes:
  - id: "split-array"
    from: "direct:items"
    split:
      expression:
        language: "jsonpath"
        expression: "$.items[*]"
    steps:
      - to: "log:item"

Choice

routes:
  - id: "choice-by-type"
    from: "direct:orders"
    choice:
      - when:
          jsonpath: "$.type == 'premium'"
        steps:
          - to: "log:premium"
      - otherwise:
          steps:
            - to: "log:standard"

Usage

use camel_language_jsonpath::JsonPathLanguage;
use camel_language_api::Language;

let lang = JsonPathLanguage;

// Create a predicate
let pred = lang.create_predicate("$.items[?(@.price > 10)]").unwrap();

// Create an expression
let expr = lang.create_expression("$.store.name").unwrap();

Registration

JsonPathLanguage is registered in CamelContext under the name "jsonpath" when the lang-jsonpath feature is enabled:

let mut ctx = CamelContext::new();
// JsonPathLanguage available as "jsonpath"
let lang = ctx.resolve_language("jsonpath").unwrap();

License

Apache-2.0