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:
[]
= "0.5"
= ["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 JsonPathLanguage;
use Language;
let lang = JsonPathLanguage;
// Create a predicate
let pred = lang.create_predicate.unwrap;
// Create an expression
let expr = lang.create_expression.unwrap;
Registration
JsonPathLanguage is registered in CamelContext under the name "jsonpath" when the lang-jsonpath feature is enabled:
let mut ctx = new;
// JsonPathLanguage available as "jsonpath"
let lang = ctx.resolve_language.unwrap;
License
Apache-2.0