(text json jmespath) - JMESPath

Library (text json jmespath)

This library provides JMESPath procedures. JMESPath is defined on JMESPath.

The following example shows how to use the library:

(import (rnrs) (text json jmespath))

((jmespath "a") '#(("a" . "foo") ("b" . "bar") ("c" . "baz")))
foo

Scheme APIs

Returns a procedure takes one argument, which must be a vector representad JSON.

The given path must be a string which is a valid JMESPath, otherwise raises &jmespath.

Conditions

This section describes conditions might be raised by the jmespathprocedure or the procedure returned by the jmespath procedure.

The library doesn't export the condition type itself. (e.g. &jmespathisn't exported from the library). However for the comprehensivity, we also describe the hierarchy of the conditions here:

+ &error (standard R6RS error)
  + &jmespath
    + &jmespath:parse
    + &jmespath:expression
        - expression
        - argument
      + &jmespath:compile
      + &jmespath:runtime

The &jmespath is the root condition. This condition itself won't be raised.

The &jmespath:parse is the condition raised by the parser. This means either the given expression is lexically incorrect or grammartically incorrect.

The &jmespath:expression is the base condition of both &jmespath:compile and &jmespath:runtime. This condition itself won't be raised.

The &jmespath:compile is the condition raised by the compiler. This means the parsed expression is syntatically incorrect.

The &jmespath:runtime is the condition raised by the returned procedure. This means evaluation error. For example, a string is passed to the avgfunction.

Returns #t if the given obj is an instance of &jmespath, otherwise #f.

Returns #t if the given obj is an instance of &jmespath:parse, otherwise #f.

The &jmespath:parse is a sub condition of &jmespath.

Returns expression field of the given jmespath-error.

The the given jmespath-error must be a sub condition of &jmespath:expression.

Returns arguments field of the given jmespath-error.

The the given jmespath-error must be a sub condition of &jmespath:expression.

Returns #t if the given obj is an instance of &jmespath:compile, otherwise #f.

The &jmespath:compile is a sub condition of &jmespath:expression.

Returns #t if the given obj is an instance of &jmespath:runtime, otherwise #f.

The &jmespath:runtime is a sub condition of &jmespath:expression.

Extra functions

This library provides extra functions for usability.

JMESPath Function parent node

Returns parent node of the given node. This function can be used like this:

((jmespath "*.bar.parent(@)") '#(("foo" . #(("bar" . 1)))))
'(#((bar . 1)))

A literal doesn't have a parent so returns null.

((jmespath "parent(`{}`)") '#(("foo" . #(("bar" . 1)))))
'null

JMESPath Function unique array

Returns unique elements of the given array. This function can be used like this:

((jmespath "unique(@)") '(1 2 1 2 3))
'(1 2 3)

It raises a &jmespath:runtime if the give array is not an array.

JMESPath Function is_odd number

Returns #t if the given number is an odd number. This function can be used like this:

((jmespath "is_odd(@)") '5)
#t

It raises a &jmespath:runtime if the give number is not a number.

JMESPath Function is_even number

Returns #t if the given number is an even number. This function can be used like this:

((jmespath "is_even(@)") '5)
#t

It raises a &jmespath:runtime if the give number is not a number.

JMESPath Function remove array/object expr

Removes element from the given array/object if the _expr_returns true value.

The array/object must be an array or object.

The expr must be an expression reference.

The expr is executed in the context of the elements of array/object. Means if the @ is passed to the expr, then the receiving value is one of the elements of the array/object.

This function can be used like this:

((jmespath "remove(@, &odd(@))") '(1 2 3 4 5))
'(1 3 5)

It raises a &jmespath:runtime if the give array/object is not either an array or object, or if the given expr is not a function reference.

Removes entries from the given object either if array/expr is an array of string and it contains the key of the entry or if array/expr is a function expression and returns true value.

The object must be an object.

This function can be used like this:

((jmespath "remove_entry(@, `[\"key2\"]`)") '#(("key" . 1)))
'#((key . 1))

((jmespath "remove_entry(@, &contains(`[\"key2\"]`, @))")
 '#(("key" . 1) ("key2" . 2)))
'#((key . 1))

It raises a &jmespath:runtime if the give object is not an object, or if the given array/expr is not an array of string or function reference.

JMESPath Function array_of any ...

Returns array of given arguments any.

((jmespath "array_of(`1`, `2`, `3`)") 'null)
'(1 2 3)