From d4204790d2f65a2e7b8abca490c691ea89e1541a Mon Sep 17 00:00:00 2001 From: John Brinkman Date: Fri, 4 Apr 2025 05:56:32 -0400 Subject: [PATCH] Updated documentation --- README.md | 5 + ...on-formula-specification-2.0.0-beta.1.html | 8278 +++++++++++++++++ ...son-formula-specification-2.0.0-beta.1.pdf | Bin 0 -> 1382950 bytes doc/spec.adoc | 19 +- package.json | 2 +- src/functions.js | 148 +- test/functions.json | 16 +- test/specSamples.json | 8 +- test/tests.json | 2 +- 9 files changed, 8396 insertions(+), 82 deletions(-) create mode 100644 doc/output/json-formula-specification-2.0.0-beta.1.html create mode 100644 doc/output/json-formula-specification-2.0.0-beta.1.pdf diff --git a/README.md b/README.md index 25004deb..338fb0e7 100644 --- a/README.md +++ b/README.md @@ -51,3 +51,8 @@ Specification / Reference: [HTML](https://opensource.adobe.com/json-formula/doc/ [JavaScript API](./doc/output/JSDOCS.md) [Developer Instructions](./DEVELOPMENT.md) + +# Beta 2.0.0 Documentation +[HTML](https://opensource.adobe.com/json-formula/doc/output/json-formula-specification-2.0.0-beta.1.html) +[PDF](https://opensource.adobe.com/json-formula/doc/output/json-formula-specification-2.0.0-beta.1.pdf) + diff --git a/doc/output/json-formula-specification-2.0.0-beta.1.html b/doc/output/json-formula-specification-2.0.0-beta.1.html new file mode 100644 index 00000000..746ae936 --- /dev/null +++ b/doc/output/json-formula-specification-2.0.0-beta.1.html @@ -0,0 +1,8278 @@ + + + + + + + + +json-formula Specification + + + + + +
+ +
+

Scope

+
+
+

This document is the specification for json-formula, an expression grammar that operates on JSON (JavaScript Object Notation) documents. The referenced JSON documents and JSON literals must conform to RFC 8259.

+
+
+

The grammar borrows from

+
+
+
    +
  • +

    OpenFormula for spreadsheet operators and function

    +
  • +
  • +

    JMESPath for JSON query semantics

    +
  • +
+
+
+

The intended audience are both end-users of json-formula as well as implementors; the contents are then both a user guide and a specification.

+
+
+
+
+

1. Notation

+
+
+

In the specification, examples are shown through the use of a search function. The syntax for this function is:

+
+
+
+
eval(<json-formula expr>, <JSON document>) -> <return value>
+
+
+
+

For simplicity, the json-formula expression and the JSON document are not quoted. For example:

+
+
+
+
eval(foo, {"foo": "bar"}) -> "bar"
+
+
+
+

The result of applying a json-formula expression against a JSON document will result in valid JSON, provided there are no errors during the evaluation process.

+
+
+
+
+

2. Data Types

+
+
+

json-formula supports all the JSON types:

+
+
+
    +
  • +

    number: All numbers are internally represented as double-precision floating-point

    +
  • +
  • +

    string

    +
  • +
  • +

    boolean: true or false

    +
  • +
  • +

    array: an ordered, sequence of values

    +
  • +
  • +

    object: an unordered collection of key value pairs

    +
  • +
  • +

    null

    +
  • +
+
+
+

There is an additional type that is not a JSON type that’s used in +json-formula functions:

+
+
+
    +
  • +

    expression: A string prefixed with an ampersand (&) character

    +
  • +
+
+
+

This specification uses the term "scalar" to refer to any value that is not an array, object or expression. Scalars include numbers, strings, booleans, and null values.

+
+
+

2.1. Type Coercion

+
+

If the supplied data is not correct for the execution context, json-formula will attempt to coerce the data to the correct type. Coercion will occur in these contexts:

+
+
+
    +
  • +

    Operands of the concatenation operator (&) shall be coerced to a string, except when an operand is an array. Arrays shall be coerced to an array of strings.

    +
  • +
  • +

    Operands of numeric operators (+, -, *, /) shall be coerced to numbers except when the operand is an array. Arrays shall be coerced to an array of numbers.

    +
  • +
  • +

    Operands of the union operator (~) shall be coerced to an array

    +
  • +
  • +

    The left-hand operand of ordering comparison operators (>, >=, <, <=) must be a string or number. Any other type shall be coerced to a number.

    +
  • +
  • +

    If the operands of an ordering comparison are different, they shall both be coerced to a number

    +
  • +
  • +

    Parameters to functions shall be coerced when there is a single viable coercion available. For example, if a null value is provided to a function that accepts a number or string, then coercion shall not happen, since a null value can be coerced to both types. Conversely if a string is provided to a function that accepts a number or array of numbers, then the string shall be coerced to a number, since there is no supported coercion to convert it to an array of numbers.

    +
  • +
+
+
+

The equality and inequality operators (=, ==, !=, <>) do not perform type coercion. If operands are different types, the values are considered not equal.

+
+
+

If an ordering comparison requires coercion, and the coercion is not possible (including the case where a string cannot be coerced to a number), the comparison will return false. e.g., {a: 12} < 12 and "12a" < 13 will each return false.

+
+
+

In all cases except ordering comparison, if the coercion is not possible, a TypeError error shall be raised.

+
+

Examples

+
+
+
    eval("abc" & 123, {}) -> "abc123"
+    eval("123" * 2, {}) -> 246
+    eval([1,2,3] ~ 4, {}) -> [1,2,3,4]
+    eval(123 < "124", {}) -> true
+    eval("23" > 111, {}) -> false
+    eval(avgA(["2", "3", "4"]), {}) -> 3
+    eval(1 == "1", {}) -> false
+
+
+
+
+

2.2. Type Coercion Rules

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Provided TypeExpected TypeResult

number

string

number converted to a string, following the JavaScript toString() rules.

boolean

string

"true" or "false"

array

string

Not supported

object

string

Not supported

null

string

"" (empty string)

string

number

Parse the string to a number. An empty string converts to zero. If the string is not a well-formed number, the coercion will fail.

boolean

number

true → 1 false → 0

array

number

Not supported

object

number

Not supported

null

number

0

number

array

create a single-element array with the number

string

array

create a single-element array with the string

boolean

array

create a single-element array with the boolean

object

array

Not supported

null

array

Not supported

number

object

Not supported

string

object

Not supported

boolean

object

Not supported

array

object

Not supported. Use: fromEntries(entries(array))

null

object

Not supported

number

boolean

zero is false, all other numbers are true

string

boolean

Empty string is false, populated strings are true

array

boolean

Empty array is false, populated arrays are true

object

boolean

Empty object is false, populated objects are true

null

boolean

false

+
+

An array may be coerced to another type of array as long as there is a supported coercion for the array content. For example, just as a string can be coerced to a number, an array of strings may be coerced to an array of numbers.

+
+
+

Note that while strings, numbers and booleans may be coerced to arrays, they may not be coerced to a different type within that array. For example, a number cannot be coerced to an array of strings — even though a number can be coerced to a string, and a string can be coerced to an array of strings.

+
+

Examples

+
+
+
    eval("\"$123.00\" + 1", {}) -> TypeError
+    eval("truth is " & `true`, {}) -> "truth is true"
+    eval(2 + `true`, {}) -> 3
+    eval(minA(["20", "30"]), {}) -> 20
+
+
+
+
+

2.3. Date and Time Values

+
+

In order to support date and time functions, json-formula represents date and time values as numbers where:

+
+
+
    +
  • +

    The integral portion of the number represents the number of days since the epoch: January 1, 1970, UTC

    +
  • +
  • +

    The fractional portion of the number represents the fractional portion of the day

    +
  • +
  • +

    The date/time value is offset from the current time zone to UTC

    +
  • +
  • +

    The current time zone is determined by the host operating system

    +
  • +
+
+
+

The preferred ways to create a date/time value are by using one of these functions:

+
+
+ +
+
+

Functions that operate on a date/time value will convert the date/time value back to the local time zone.

+
+

Examples

+
+
+
    eval(datetime(1970,1,2,0,0,0) - datetime(1970,1,1,0,0,0), {}) -> 1
+    eval(datetime(2010,1,21,12,0,0) |
+      {month: month(@), day: day(@), hour: hour(@)}, {}) ->
+        {"month": 1, "day": 21, "hour": 12}
+
+
+
+
+

2.4. Integers

+
+

Some functions and operators accept numeric parameters that are expected to be integers. In these contexts, if a non-numeric or non-integer value is provided, it will be coerced to a number and then truncated. The specific truncation behaviour is to remove any fractional value without rounding.

+
+
+
+

2.5. Floating Point Precision

+
+

Numbers are represented in double-precision floating-point format. As with any system that uses this level of precision, results of expressions may be off by a tiny fraction. e.g. +10 * 1.44 → 14.399999999999999

+
+
+

Authors should mitigate this behavior:

+
+
+
    +
  • +

    When comparing fractional results, do not compare for exact equality. Instead, compare within a range. e.g.: instead of: a == b, use: abs(a-b) < 0.000001

    +
  • +
  • +

    leverage the built-in functions that manipulate fractional values:

    +
    + +
    +
  • +
+
+
+
+
+
+

3. Errors

+
+
+

Errors may be raised during the json-formula evaluation process. +The following errors are defined:

+
+
+
    +
  • +

    EvaluationError is raised when an unexpected runtime condition occurs. For example, divide by zero.

    +
  • +
  • +

    FunctionError is raised when an unknown function is encountered or when a function receives invalid arguments.

    +
  • +
  • +

    SyntaxError is raised when the supplied expression does not conform to the json-formula grammar.

    +
  • +
  • +

    TypeError is raised when coercion is required for the current evaluation context, but the coercion is not possible.

    +
  • +
+
+
+
+
+

4. Grammar

+
+
+

The grammar is specified using Antlr. For a machine-readable version of the grammar, see the grammar.g4 file in the source repository.

+
+
+
+
grammar JsonFormula;
+
+formula : expression EOF ;
+
+expression
+  : '(' expression ')' 
+  | expression bracketExpression 
+  | bracketExpression 
+  | objectExpression 
+  | expression '.' chainedExpression 
+  | '!' expression 
+  | '-' expression 
+  | expression ('*' | '/') expression	
+  | expression ('+' | '-' | '~') expression	
+  | expression '&' expression	
+  | expression COMPARATOR expression 
+  | expression '&&' expression 
+  | expression '||' expression 
+  | expression '|' expression 
+  | identifier 
+  | wildcard 
+  | arrayExpression 
+  | JSON_LITERAL 
+  | functionExpression 
+  | STRING 
+  | (REAL_OR_EXPONENT_NUMBER | INT) 
+  | currentNode 
+  ;
+
+chainedExpression
+  : identifier
+  | arrayExpression
+  | objectExpression
+  | functionExpression
+  | wildcard
+  ;
+
+wildcard : '*' ;
+
+arrayExpression : '[' expression (',' expression)* ']' ;
+
+objectExpression
+  : '{' keyvalExpr (',' keyvalExpr)* '}'  
+  ;
+
+keyvalExpr : identifier ':' expression ;
+
+bracketExpression
+  : '[' '*' ']' 
+  | '[' slice ']' 
+  | '[' ']' 
+  | '[?' expression ']' 
+  | '[' signedInt ']' 
+  ;
+
+slice : start=signedInt? ':' stop=signedInt? (':' step=signedInt?)? ;
+
+COMPARATOR
+  : '<'
+  | '<='
+  | '=='
+  | '='
+  | '>='
+  | '>'
+  | '!='
+  | '<>'
+  ;
+
+functionExpression
+  : NAME '(' functionArg (',' functionArg)* ')'
+  | NAME '(' ')'
+  ;
+
+functionArg
+  : expression
+  | expressionType
+  ;
+
+currentNode : '@' ;
+
+expressionType : '&' expression ;
+
+identifier
+  : NAME
+  | QUOTED_NAME
+  ;
+
+signedInt
+  : '-'? INT+
+  ;
+
+NAME : [a-zA-Z_$] [a-zA-Z0-9_$]* ;
+
+QUOTED_NAME : '\'' (ESC | ~ ['\\])* '\'';
+
+JSON_LITERAL
+  : '`' (ESC | ~ [\\`]+)* '`'
+  ;
+
+STRING : '"' (ESC | ~["\\])* '"' ;
+
+fragment ESC : '\\' (UNICODE | [bfnrt\\`'"/]);
+
+fragment UNICODE
+  : 'u' HEX HEX HEX HEX
+  ;
+
+fragment HEX
+  : [0-9a-fA-F]
+  ;
+
+REAL_OR_EXPONENT_NUMBER
+  : INT? '.' [0-9] + EXP?
+  | INT EXP
+  ;
+
+INT
+  : [0-9]+
+  ;
+
+fragment EXP
+  : [Ee] [+\-]? INT
+  ;
+
+WS
+  : [ \t\n\r] + -> skip
+  ;
+
+
+
+

4.1. Operator Precedence

+
+

The antlr grammar defines operator precedence by the order of expressions in the grammar. These are the operators listed from strongest to weakest binding:

+
+
+
    +
  • +

    Parenthesis ()

    +
  • +
  • +

    Bracket Expression […​]

    +
  • +
  • +

    Braces {}

    +
  • +
  • +

    Dot . (chained expressions)

    +
  • +
  • +

    Flatten: []

    +
  • +
  • +

    Unary not !, unary minus: -

    +
  • +
  • +

    multiply: *, divide: /

    +
  • +
  • +

    add: +, subtract: -, union: ~

    +
  • +
  • +

    concatenate: &

    +
  • +
  • +

    Comparison operators: =, ==, >, <, >=, <=, !=, <>

    +
  • +
  • +

    and: &&

    +
  • +
  • +

    or: ||

    +
  • +
  • +

    pipe: |

    +
  • +
+
+
+
+
+
+

5. Literals

+
+
+

5.1. JSON Literals

+
+
+
  JSON_LITERAL: '`' (ESC | ~ [\\`]+)* '`';
+
+
+
+

A JSON literal expression allows arbitrary JSON objects to be +specified anywhere an expression is permitted. Implementations should +use a JSON parser to parse these literals. Note that the backtick character +( ` ) character must be escaped in a JSON literal which means +implementations need to handle this case before passing the resulting string to +a JSON parser.

+
+

Examples

+
+
+
  eval(`"foo"`, {}) -> "foo"
+  eval(`"foo\`bar"`, {}) -> "foo`bar"
+  eval(`[1, 2]`, {}) -> [1, 2]
+  eval(`true`, {}) -> true
+  eval(`{"a": "b"}`.a, {}) -> "b"
+  eval({first: a, type: `"mytype"`}, {"a": "b", "c": "d"})
+       -> {"first": "b", "type": "mytype"}
+
+
+
+
+

5.2. String Literals

+
+
+
STRING : '"' (ESC | ~["\\])* '"' ;
+
+fragment ESC : '\\' (UNICODE | [bfnrt\\`'"/]);
+
+fragment UNICODE
+  : 'u' HEX HEX HEX HEX
+  ;
+
+fragment HEX
+  : [0-9a-fA-F]
+  ;
+
+
+
+

A STRING literal is a value enclosed in double quotes and supports the same character escape sequences as strings in JSON, as encoded by the ESC fragment. +e.g., a character 'A' could be specified as the unicode sequence: \u0041.

+
+
+

A string literal can also be expressed as a JSON literal. For example, the following expressions both +evaluate to the same value: "foo"

+
+
+
+
    eval(`"foo"`, {}) -> "foo"
+    eval("foo", {}) -> "foo"
+
+
+
+
+

5.3. Number literals

+
+
+
numberLiteral = REAL_OR_EXPONENT_NUMBER | INT
+
+REAL_OR_EXPONENT_NUMBER
+  : INT? '.' [0-9] + EXP?
+  | INT EXP
+  ;
+
+INT
+  : [0-9]+
+  ;
+
+fragment EXP
+  : [Ee] [+\-]? INT
+  ;
+
+
+
+

Number literals follow the same syntax rules as numeric values in JSON with three exceptions:

+
+
+
    +
  1. +

    Number literals may omit a leading zero before the decimal point. For example, .123 is not valid JSON, but is allowed as a number literal.

    +
  2. +
  3. +

    Number literals may include leading zeros ahead of the integral part of the number. For example, 0123 is not valid JSON, but is allowed as a number literal.

    +
  4. +
  5. +

    The grammar construction for a number literal does not include a minus sign. Literal expressions are made negative by prefixing them with a unary minus.

    +
  6. +
+
+
+

Note that number literals (and JSON numbers) allow scientific notation.

+
+

Examples

+
+
+
  eval(44, {}) -> 44
+  eval([12, 13], {}) -> [12, 13]
+  eval({a: 12, b: 13}, {}) -> {"a": 12, "b": 13}
+  eval(foo | [1], {"foo": [3,4,5]}) -> 4
+  eval(foo | @[-1], {"foo": [3,4,5]}) -> 5
+  eval(foo | [1, 2], {"foo": [3,4,5]}) -> [1, 2]
+  eval(6 / 3, {}) -> 2
+  eval(1e2, {}) -> 100
+
+
+
+
+
+
+

6. Identifiers

+
+
+
+
identifier
+  : NAME
+  | QUOTED_NAME
+  ;
+
+NAME : [a-zA-Z_$] [a-zA-Z0-9_$]* ;
+
+QUOTED_NAME : '\'' (ESC | ~ ['\\])* '\'';
+
+
+
+

An identifier is the most basic expression and can be used to extract a +single element from a JSON document. The return value for an identifier is the value associated with the identifier. If the identifier does not exist in the JSON document, then a null value is returned.

+
+
+

Using the NAME token grammar rule, identifiers can be one or more characters, +and must start with a character in the range: A-Za-z_$.

+
+
+

When an identifier has a +character sequence that does not match a NAME token, an identifier shall follow the QUOTED_NAME token rule where an identifier is specified with a single quote ('), followed by +any number of characters, followed by another single quote. Any valid string can be placed between single quotes, including JSON escape sequences.

+
+

Examples

+
+
+
   eval(foo, {"foo": "value"}) -> "value"
+   eval(bar, {"foo": "value"}) -> null
+   eval(foo, {"foo": [0, 1, 2]}) -> [0, 1, 2]
+   eval('with space', {"with space": "value"}) -> "value"
+   eval('special chars: !@#"', {"special chars: !@#": "value"}) -> "value"
+   eval('quote\'char', {"quote'char": "value"}) -> "value"
+   eval('\u2713', {"\u2713": "value"}) -> "value"
+
+
+
+
+
+

7. Operators

+
+
+

7.1. Comparison Operators

+
+

The following comparison operators are supported:

+
+
+
    +
  • +

    = , ==: test for equality

    +
  • +
  • +

    !=, <>: test for inequality

    +
  • +
  • +

    <: less than

    +
  • +
  • +

    <=: less than or equal to

    +
  • +
  • +

    >: greater than

    +
  • +
  • +

    >=: greater than or equal to

    +
  • +
+
+
+

7.1.1. Equality Operators

+
+

Two representations of the equality and inequality operators are supported: = and == are equivalent in functionality. Both variations are supported in order to provide familiarity to users with experience with similar grammars. Similarly, != and <> function identically. Note that there is no ambiguity with the = operator, since json-formula does not have an assignment operator.

+
+
+
    +
  • +

    A string is equal to another string if they they have the exact same sequence +of code points

    +
  • +
  • +

    number values are compared for an exact match. When comparing fractional values, authors should take into account floating point precision considerations.

    +
  • +
  • +

    The literal values true/false/null are equal only to their +own literal values

    +
  • +
  • +

    Two JSON objects are equal if they have the same set of +keys and values. Two JSON objects x and y, are consider equal if they have the same number of key/value pairs and if, for each key value +pair (i, j) in x, there exists an equivalent pair (i, j) in y

    +
  • +
  • +

    Two JSON arrays are equal if they have equal elements in the same order. Two arrays x and y are considered equal if they have the same length and, for each i from 0 until length(x), x[i] == y[i]

    +
  • +
  • +

    The comparison of array and objects is a deep comparison. That is, where nested arrays or objects are found, the nested elements will included in the comparison.

    +
  • +
+
+
+
+

7.1.2. Ordering Operators

+
+

Ordering comparisons follow these rules:

+
+
+
    +
  • +

    If both operands are numbers, a numeric comparison is performed

    +
  • +
  • +

    If both operands are strings, they are compared as strings, based on the values of the Unicode code points they contain

    +
  • +
  • +

    If operands are mixed types, type coercion to number is applied before performing the comparison

    +
  • +
+
+
+
+
+

7.2. Numeric Operators

+
+

The following operators work with numeric operands:

+
+
+
    +
  • +

    addition: +

    +
  • +
  • +

    subtraction: -

    +
  • +
  • +

    multiplication *

    +
  • +
  • +

    division: /

    +
  • +
+
+
+
+
  eval(left + right, {"left": 8, "right": 12 }) -> 20
+  eval(right - left - 10, {"left": 8, "right": 12 }) -> -6
+  eval(4 + 2 * 4, {}) -> 12
+  eval(10 / 2 * 3, {}) -> 15
+
+
+
+
+

7.3. Concatenation Operator

+
+

The concatenation operator (&) takes two string operands and combines them to form a single string.

+
+
+
+
  eval(left & value & right,
+    {"left": "[", "right": "]", "value": "abc" }) -> "[abc]"
+  eval(map(values, &"$" & @), {"values": [123.45, 44.32, 99.00] }) ->
+      ["$123.45", "$44.32", "$99"]
+
+
+
+
+

7.4. Array Operands

+
+

The numeric and concatenation operators (+, -, *, /, &) have special behavior when applied to arrays.

+
+
+
    +
  • +

    When both operands are arrays, a new array is returned where the elements are populated by applying the operator on each element of the left operand array with the corresponding element from the right operand array

    +
  • +
  • +

    If both operands are arrays and they do not have the same size, the shorter array is padded with null values

    +
  • +
  • +

    If one operand is an array and one is a scalar value, the scalar operand will be converted to an array by repeating the value to the same size array as the other operand

    +
  • +
+
+
+
+
  eval([1,2,3] + [2,3,4], {}) -> [3,5,7]
+  eval([1,2,3,4] * [1,2,3], {}) -> [1,4,9,0]
+  eval([1,2,3,4] & "%", {}) -> ["1%", "2%", "3%", "4%"]
+
+
+
+

7.4.1. Union Operator

+
+

The union operator (~) returns an array formed by concatenating the contents of two arrays.

+
+
+
+
  eval(a ~ b, {"a": [0,1,2], "b": [3,4,5]}) -> [0,1,2,3,4,5]
+  eval(a ~ b, {"a": [[0,1,2]], "b": [[3,4,5]]}) -> [[0,1,2],[3,4,5]]
+  eval(a[] ~ b[], {"a": [[0,1,2]], "b": [[3,4,5]]}) -> [0,1,2,3,4,5]
+  eval(a ~ 10, {"a": [0,1,2]}) -> [0,1,2,10]
+  eval(a ~ `null`, {"a": [0,1,2]}) -> [0,1,2,null]
+
+
+
+
+
+

7.5. Boolean Operators

+
+

7.5.1. Or Operator

+
+

The OR operator (||) will evaluate to either the left operand or the right +operand. If the left operand can be coerced to a true value, it is used +as the return value. If the left operand cannot be coerced to a true value, then the right operand is used as the return value. +If the left operand is a truth-like value, then the right operand is not evaluated. For example, the expression: if() will result in a FunctionError (missing arguments), but the expression true() || if() will not result in a FunctionError because the right operand is not evaluated.

+
+
+

The following conditions cannot be coerced to true:

+
+
+
    +
  • +

    Empty array: []

    +
  • +
  • +

    Empty object: {}

    +
  • +
  • +

    Empty string: ""

    +
  • +
  • +

    False boolean: false

    +
  • +
  • +

    Null value: null

    +
  • +
  • +

    zero value: 0

    +
  • +
+
+
Examples
+
+
+
  eval(foo || bar, {"foo": "foo-value"}) -> "foo-value"
+  eval(foo || bar, {"bar": "bar-value"}) -> "bar-value"
+  eval(foo || bar, {"foo": "foo-value", "bar": "bar-value"}) -> "foo-value"
+  eval(foo || bar, {"baz": "baz-value"}) -> null
+  eval(foo || bar || baz, {"baz": "baz-value"}) -> "baz-value"
+  eval(override || myarray[-1], {"myarray": ["one", "two"]}) -> "two"
+  eval(override || myarray[-1], {"myarray": ["one", "two"], "override": "yes"})
+       -> "yes"
+
+
+
+
+

7.5.2. And Operator

+
+

The AND operator (&&) will evaluate to either the left operand or the right +operand. If the left operand is a truth-like value, +then the right operand is returned. Otherwise the left operand is returned. This reduces to the +expected truth table:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LHSRHSResult

True

True

True

True

False

False

False

True

False

False

False

False

+
+

This is the standard truth table for a +logical conjunction.

+
+
+

If the left operand is not a truth-like value, then the right operand is not evaluated. For example, the expression: true() && if() will result in a FunctionError (missing arguments), but the expression false() && if() will not result in an error because the right operand is not evaluated.

+
+
Examples
+
+
+
  eval(True && False, {"True": true, "False": false}) -> false
+  eval(Number && EmptyList, {"Number": 5, "EmptyList": []}) -> []
+  eval(foo[?a == `1` && b == `2`],
+         {"foo": [{"a": 1, "b": 2}, {"a": 1, "b": 3}]}) -> [{"a": 1, "b": 2}]
+
+
+
+
+
+

7.6. Unary Operators

+
+

7.6.1. Not Operator

+
+

A unary NOT operator (!) is a boolean operator that negates the result of an expression. If the expression +results in a truth-like value, NOT operator will change this value to +false. If the expression results in a false-like value, a +NOT operator will change the value to true.

+
+
Examples
+
+
+
  eval(!True, {"True": true}) -> false
+  eval(!False, {"False": false}) -> true
+  eval(!Number, {"Number": 5}) -> false
+  eval(!EmptyList, {"EmptyList": []}) -> true
+
+
+
+
+

7.6.2. Minus Operator

+
+

A unary Minus operator (-) is a numeric operator that negates the value of an operand.

+
+
Examples
+
+
+
  eval(-11, {}) -> -11
+  eval(-n, {"n": 5, "nn": -10}) -> -5
+  eval(-nn, {"n": 5, "nn": -10}) -> 10
+  eval(--n, {"n": 5, "nn": -10}) -> 5
+
+
+
+
+
+
+
+

8. Expressions

+
+
+

8.1. Chained Expressions

+
+
+
expression: expression '.' chainedExpression
+
+chainedExpression
+  : identifier
+  | arrayExpression
+  | objectExpression
+  | functionExpression
+  | wildcard
+  ;
+
+wildcard : '*' ;
+
+
+
+

A chained expression is a combination of two expressions separated by the dot (.) char. +A chained expression is evaluated as follows:

+
+
+
    +
  • +

    Evaluate the expression on the left against the source JSON document

    +
  • +
  • +

    Evaluate the expression on the right against the result of the left expression +evaluation

    +
  • +
+
+
+

In pseudo-code

+
+
+
+
  left-evaluation = eval(left-expression, original-json-document)
+  result = eval(right-expression, left-evaluation)
+
+
+
+

A chained expression is itself an expression, so there can be multiple levels of +chained expressions: grandparent.parent.child.

+
+

Examples

+
+

Given a JSON document: {"foo": {"bar": "baz"}}, and a json-formula expression: +foo.bar, the evaluation process would be

+
+
+
+
  left-evaluation = eval(foo, {"foo": {"bar": "baz"}}) -> {"bar": "baz"}
+  result = eval(bar, {"bar": "baz"}) -> "baz"
+
+
+
+

The final result in this example is "baz".

+
+
+

Additional examples

+
+
+
+
   eval(foo.bar, {"foo": {"bar": "value"}}) -> "value"
+   eval(foo.'bar', {"foo": {"bar": "value"}}) -> "value"
+   eval(foo.bar, {"foo": {"baz": "value"}}) -> null
+   eval(foo.bar.baz, {"foo": {"bar": {"baz": "value"}}}) -> "value"
+
+
+
+
+

8.2. Bracket Expressions

+
+
+
expression: expression bracketExpression
+
+bracketExpression
+  : '[' '*' ']'
+  | '[?' expression ']'
+  | '[' signedInt ']'
+  | '[' slice ']'
+  | '[' ']'
+  ;
+
+signedInt
+  : '-'? INT+
+  ;
+
+
+
+

From the bracketExpression construction, the bracketed contents provide access to the elements in an array.

+
+
+
    +
  • +

    The wildcard: ('[' '*' ']') variation is discussed in the Wildcard Expressions section

    +
  • +
  • +

    The filtering: ('[?' expression ']') variation is discussed in the Filter Expressions section

    +
  • +
+
+
+

8.2.1. Index Expressions

+
+

When brackets enclose a signed integer ('[' signedInt ']'), the integer value is used to index into an array. +Indexing is 0 based where an index of 0 refers to the first element of the array. A negative index indicates that indexing is relative to the end of the array, specifically:

+
+
+
+
  negative-index == (length of array) + negative-index
+
+
+
+

Given an array of length N, an index of -1 would be equal to a positive +index of N - 1, which is the last element of the array. +An index value is outside the bounds of the array when the value is greater than or equal to the length of the array or less than the negative length of the array. +If an index is outside the bounds of the array then a value of null is returned.

+
+
Examples
+
+
+
  eval(a[1], {a: [5,6,7,8,9]}) -> 6
+  eval(a[-2], {a: [5,6,7,8,9]}) -> 8
+  eval([0], ["first", "second", "third"]) -> "first"
+  eval([-1], ["first", "second", "third"]) -> "third"
+  eval([100], ["first", "second", "third"]) -> null
+  eval(foo[0], {"foo": ["first", "second", "third"]}) -> "first"
+  eval(foo[100], {"foo": ["first", "second", "third"]}) -> null
+  eval(foo[0][0], {"foo": [[0, 1], [1, 2]]}) -> 0
+
+
+
+
+

8.2.2. Slices

+
+
+
  slice : start=signedInt? ':' stop=signedInt? (':' step=signedInt?)? ;
+
+
+
+

A slice expression allows you to select a contiguous subset of an array. A +slice has a start, stop, and step value. The general form of a +slice is [start:stop:step]. Each component of the slice is optional and can +be omitted, but there must be at least one colon (:) character.

+
+
+
+
+

Slices in json-formula have the same semantics as python slices. If you’re +familiar with python slices, you’re familiar with json-formula slices.

+
+
+
+
+

Given a start, stop, and step value, the sub elements in an array +are extracted as follows:

+
+
+
    +
  • +

    The first element in the extracted array is the index denoted by start.

    +
  • +
  • +

    The last element in the extracted array is the index denoted by stop - 1.

    +
  • +
  • +

    The step value determines the amount by which the index increases or decreases. The default step value is 1. For example, a step value of 2 will return every second value from the array. If step is negative, slicing is performed in reverse — from the last (stop) element to the start.

    +
  • +
+
+
+

Slice expressions adhere to the following rules:

+
+
+
    +
  • +

    If a negative start position is given, it is calculated as the total length +of the array plus the given start position.

    +
  • +
  • +

    If no start position is given, it is assumed to be 0 if the given step is +greater than 0 or the end of the array if the given step is less than 0.

    +
  • +
  • +

    If a negative stop position is given, it is calculated as the total length +of the array plus the given stop position.

    +
  • +
  • +

    If no stop position is given and the given step is greater than 0 then the stop is assumed to be the length of the array.

    +
  • +
  • +

    If no stop position is given and the given step is less than 0, then the stop is assumed to be negative (length+1).

    +
  • +
  • +

    If the given step is omitted, it is assumed to be 1.

    +
  • +
  • +

    If the given step is 0, an EvaluationError error must be raised.

    +
  • +
  • +

    If the element being sliced is not an array, the result is null.

    +
  • +
  • +

    If the element being sliced is an array and yields no results, the result +must be an empty array.

    +
  • +
+
+

Examples

+
+
+
  eval([0:4:1], [0, 1, 2, 3]) -> [0, 1, 2, 3]
+  eval([0:4], [0, 1, 2, 3]) -> [0, 1, 2, 3]
+  eval([0:3], [0, 1, 2, 3]) -> [0, 1, 2]
+  eval([:2], [0, 1, 2, 3]) -> [0, 1]
+  eval([::2], [0, 1, 2, 3]) -> [0, 2]
+  eval([::-1], [0, 1, 2, 3]) -> [3, 2, 1, 0]
+  eval([-2:], [0, 1, 2, 3]) -> [2, 3]
+
+
+
+
+

8.2.3. Flatten Operator

+
+

When the character sequence [] is provided as a bracket specifier, then +a flattening operation occurs on the current result. The flattening operator +will merge one level of sub-arrays in the current result into a single array. The flattening +operator follows these processing steps:

+
+
+
    +
  • +

    Create an empty result array

    +
  • +
  • +

    Iterate over the elements of the current result

    +
  • +
  • +

    If the current element is not an array, add to the end of the result array

    +
  • +
  • +

    If the current element is an array, add each element of the current element +to the end of the result array

    +
  • +
  • +

    The result array is returned as a projection

    +
  • +
+
+
+

Once the flattening operation has been performed, subsequent operations +are projected onto the flattened array.

+
+
+

A bracketed wildcard ([*]) and flatten ([]) behave similarly in that they produce a projection from an array. The only difference is that a bracketed wildcard preserves the original array structure while flatten collapses one level of array structure.

+
+

Examples

+
+
+
  eval(foo[], {"foo": [[0, 1], [1, 2], 3]}) -> [0,1,1,2,3]
+  eval(foo[], {"foo": [[0, 1], [1, 2], [3,[4,5]]]}) -> [0,1,1,2,3,[4,5]]
+  eval(foo[][], {"foo": [[0, 1], [1, 2], [3,[4,5]]]}) -> [0,1,1,2,3,4,5]
+
+
+
+
+
+

8.3. Projections

+
+

Projections allow you to apply an expression to a collection of elements. Projections are created when any form of a Bracket Expression transforms a source array or when a wildcard is applied to an object:

+
+
+

Given the source JSON:

+
+
+
+
{
+  "items": [
+    {
+      "desc": "pens",
+      "price": 3.23
+    },
+    {
+      "desc": "pencils",
+      "price": 1.34
+    },
+    {
+      "desc": "staplers",
+      "price": 10.79
+    }
+  ]
+}
+
+
+
+

These expressions will create a projection:

+
+
+
    +
  • +

    items[*]

    +
  • +
  • +

    items[]

    +
  • +
  • +

    items[0:2]

    +
  • +
  • +

    items[?expr]

    +
  • +
  • +

    items[0].*

    +
  • +
+
+
+

When a chained expression or bracket expression is applied to a projection, their behavior is changed so that the expression is applied to each element of the projection, rather than the underlying array itself.

+
+

Examples

+
+
+
  eval(items[*].desc, items) -> ["pens", "pencils", "staplers"]
+  eval(items[*].desc.upper(@), items) -> ["PENS", "PENCILS", "STAPLERS"]
+  eval(items[].*, items) -> [
+                                ["pens", 3.23],
+                                ["pencils", 1.34],
+                                ["staplers", 10.79]
+                              ]
+  eval(items[0:2].price * 2, items) -> [6.46, 2.68]
+  eval(items[?price < 3], items) -> [{"desc": "pencils", "price": 1.34}]
+
+
+
+

A pipe expression will stop the current projection and process it as a normal array.

+
+
+

For example, if you wanted to sum the price values, this expression: items[*].price.sum(@) will sum each individual price, returning: [3.23,1.34,10.79]. Whereas using a pipe operator will sum the array: items[*].price | sum(@) → 15.36.

+
+
+
+

8.4. Paren Expressions

+
+
+
  parenExpression = '(' expression ')'
+
+
+
+

A parenExpression allows a user to override the precedence order of +an expression
+e.g. (a || b) && c

+
+

Examples

+
+
+
  eval(foo[?(a == 1 || b == 2) && c == 5],
+         {"foo": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 4}]}) -> []
+
+
+
+
+

8.5. Array Expression

+
+
+
    arrayExpression : '[' expression (',' expression)* ']' ;
+
+
+
+

An array expression is used to extract a subset of elements from the JSON document into an array. +Within the start and closing +brackets are one or more expressions separated by a comma. Each +expression will be evaluated against the JSON document, and each result will be added to the array

+
+
+

An arrayExpression with N expressions will result in an array of length N. Given an array +expression [expr-1,expr-2,…​,expr-n], the evaluated expression will return +[evaluate(expr-1), evaluate(expr-2), …​, evaluate(expr-n)].

+
+
+

Given an array expression: [n, "doubled", n * 2] and the +data {"n": 4}, the expression is evaluated as follows:

+
+
+
    +
  1. +

    An empty array is created: []

    +
  2. +
  3. +

    The expression n is evaluated against the source document and the result (4) is appended to the array

    +
  4. +
  5. +

    The literal expression "doubled" is appended to the array

    +
  6. +
  7. +

    The expression n * 2 is evaluated against the source document and the result (8) is appended to the array

    +
  8. +
+
+
+

The final result will be: [4, "doubled", 8].

+
+

Examples

+
+
+
  eval([foo,bar], {"foo": "a", "bar": "b", "baz": "c"}) -> ["a", "b"]
+  eval([foo,bar[0]], {"foo": "a", "bar": ["b"], "baz": "c"}) -> ["a", "b"]
+  eval([foo,bar.baz], {"foo": "a", "bar": {"baz": "b"}}) -> ["a", "b"]
+  eval([foo,baz], {"foo": "a", "bar": "b"}) -> ["a", null]
+
+
+
+

The grammar contains one ambiguity: a bracket with a single signed digit e.g., [0] can be interpreted as a flatten operation or an arrayExpression with the number zero. To resolve this ambiguity, the grammar sets a precedence order so that [-?[0-9]] is treated as a an index expression. To explicitly express an array with one element, use a JSON literal: `[0]`

+
+
+
+

8.6. Object Expression

+
+
+
    objectExpression = "{" ( keyvalExpr ( "," keyvalExpr )*)? "}"
+    keyvalExpr = identifier ":" expression
+
+
+
+

An object expression is used to extract a subset of elements from the JSON document into an object. +An objectExpression requires key names to be provided, as +specified in the keyvalExpr rule. Given the following rule

+
+
+
+
    keyvalExpr = identifier ":" expression
+
+
+
+

The identifier is used as the key name and the result of evaluating the +expression is the value associated with the identifier key.

+
+
+

Each keyvalExpr within the objectExpression will correspond to a +single key value pair in the created object. If a key is specified more than once, the last value will be used. +Consistent with an arrayExpression, an objectExpression may not be empty. To create an empty object, use a JSON literal: {} .

+
+

Examples

+
+

Given an object expression {foo: one.two, bar: bar} and the +data {"bar": "bar", {"one": {"two": "one-two"}}}, the expression is +evaluated as follows:

+
+
+
    +
  1. +

    An object is created: {}

    +
  2. +
  3. +

    A key foo is created whose value is the result of evaluating one.two +against the provided JSON document: {"foo": evaluate(one.two, <data>)}

    +
  4. +
  5. +

    A key bar is created whose value is the result of evaluating the +expression bar against the provided JSON document. If key bar already exists, it is replaced.

    +
  6. +
+
+
+

The final result will be: {"foo": "one-two", "bar": "bar"}.

+
+
+

Additional examples:

+
+
+
+
  eval({foo: foo, bar: bar}, {"foo": "a", "bar": "b", "baz": "c"})
+                -> {"foo": "a", "bar": "b"}
+  eval({foo: foo, firstbar: bar[0]}, {"foo": "a", "bar": ["b"]})
+                -> {"foo": "a", "firstbar": "b"}
+  eval({foo: foo, 'bar.baz': bar.baz}, {"foo": "a", "bar": {"baz": "b"}})
+                -> {"foo": "a", "bar.baz": "b"}
+  eval({foo: foo, baz: baz}, {"foo": "a", "bar": "b"})
+                -> {"foo": "a", "baz": null}
+  eval({foo: foo, foo: 42}, {"foo": "a", "bar": "b"})
+                -> {"foo": 42}
+
+
+
+
+

8.7. Wildcard Expressions

+
+

There are two forms of wildcard expression:

+
+
+
    +
  1. +

    [*] from the bracketExpression construction:

    +
    +
    +
    bracketExpression
    +  : '[' '*' ']'
    +  | '[' slice ']'
    +  | '[' ']'
    +  | '[?' expression ']'
    +  | '[' expression ']'
    +  ;
    +
    +
    +
  2. +
  3. +

    .* from the chainedExpression construction:

    +
  4. +
+
+
+
+
expression : expression '.' chainedExpression
+
+chainedExpression
+  : identifier
+  | arrayExpression
+  | objectExpression
+  | functionExpression
+  | wildcard
+  ;
+
+wildcard : '*' ;
+
+
+
+

The [*] syntax (referred to as an array wildcard expression) may be applied to arrays, and will return a projection with all +the elements of the source array. If an array +wildcard expression is applied to any other JSON type, a value of null is +returned.

+
+
+

The .* syntax (referred to as an object wildcard expression) may be applied to objects and will return an array +of the values from the object key/value pairs. +If an object wildcard expression is applied to any other JSON type, a value of +null is returned.

+
+
+

Note that JSON objects are explicitly defined as +unordered. Therefore an object wildcard expression can return the values +associated with the object in any order.

+
+

Examples

+
+
+
  eval([*].foo, [{"foo": 1}, {"foo": 2}, {"foo": 3}]) -> [1, 2, 3]
+  eval([*].foo, [{"foo": 1}, {"foo": 2}, {"bar": 3}]) -> [1, 2, null]
+  eval(*.foo, {"a": {"foo": 1}, "b": {"foo": 2}, "c": {"bar": 1}}) ->
+      [1, 2, null]
+
+
+
+
+

8.8. currentNode

+
+
+
currentNode : '@' ;
+
+
+
+

The currentNode token represents the node being +evaluated in the current context. The currentNode token is commonly used for:

+
+
+
    +
  • +

    Functions that require the current node as an argument

    +
  • +
  • +

    Filter Expressions that examine elements of an array

    +
  • +
  • +

    Access to the current context in projections.

    +
  • +
+
+
+

json-formula assumes that all expressions operate on the current node. Because of this, an +expression such as @.name would be equivalent to just name.

+
+
+

8.8.1. currentNode state

+
+

At the start of an expression, the value of the current node is the data +being evaluated by the json-formula expression. As an expression is evaluated, currentNode must change to reflect the node +being evaluated. When in a projection, the current node value must be changed +to the node being evaluated by the projection.

+
+

Examples

+
+
+
Given:
+{
+  "family": [
+    {"name": "frank", "age": 22},
+    {"name": "jane", "age": 23}
+  ]
+}
+
+eval(@.family[0].name, {...}) -> "frank"
+
+eval(family[].[left(@.name), age], {...}) ->
+   [["f", 22], ["j", 23]]
+
+eval(family[?@.age == 23], {...}) -> [{"name": "jane", "age": 23}]
+
+eval(family[?age == 23], {...}) -> [{"name": "jane", "age": 23}]
+
+eval(family[].name.proper(@), {...}) -> ["Frank", "Jane"]
+
+eval(family[].age | avg(@), {...}) -> 22.5
+
+
+
+
+
+

8.9. Filter Expressions

+
+
+
bracketExpression
+  : '[' '*' ']'
+  | '[' slice ']'
+  | '[' ']'
+  | '[?' expression ']'
+  | '[' expression ']'
+  ;
+
+
+
+

A filter expression is defined by a bracketExpression where the bracket contents are prefixed with a question mark character (?). +A filter expression provides a way to select array elements based on a +comparison to another expression. A filter expression is evaluated as follows:

+
+
+
    +
  • +

    For each element in an array evaluate the expression against the +element.

    +
  • +
  • +

    If the expression evaluates to a truth-like value, the item (in its +entirety) is added to the result array.

    +
  • +
  • +

    If the expression does not evaluate to a truth-like value it is excluded from the +result array.

    +
  • +
+
+
+

A filter expression may be applied to arrays. Attempting +to evaluate a filter expression against any other type will return null.

+
+

Examples

+
+
+
eval(
+  foo[?a < b],
+  {
+    "foo": [
+      {"a": "char", "b": "bar"},
+      {"a": 2, "b": 1},
+      {"a": 1, "b": 2},
+      {"a": false, "b": "1"},
+      {"a": 10, "b": "12"}
+    ]
+  })
+  ->
+  [ {"a": 1, "b": 2},
+    {"a": false, "b": "1"},
+    {"a": 10, "b": "12"} ]
+
+
+
+

The five elements in the foo array are evaluated against a < b:

+
+
+
    +
  • +

    The first element resolves to the comparison "char" < "bar", and because these types are string, the comparison of code points returns false, and the first element is excluded from the result array.

    +
  • +
  • +

    The second element resolves to 2 < 1, +which is false, so the second element is excluded from the result array.

    +
  • +
  • +

    The third expression resolves to 1 < 2 which evaluates to true, so the third element is included in the result array.

    +
  • +
  • +

    The fourth expression resolves to false < "1". Since the left hand operand is boolean, both operands are coerced to numbers and evaluated as: 0 < 1 and so the fourth element included in the result array.

    +
  • +
  • +

    The final expression resolves to 10 < "12". Since we have mixed operands, the operands are coerced to numbers and evaluated as: 10 < 12 and the last element is included in the result array.

    +
  • +
+
+

Examples

+
+
+
  eval(foo[?bar==10], {"foo": [{"bar": 1}, {"bar": 10}]}) -> [{"bar": 10}]
+  eval([?bar==10], [{"bar": 1}, {"bar": 10}]}) -> [{"bar": 10}]
+  eval(foo[?a==b], {"foo": [{"a": 1, "b": 2}, {"a": 2, "b": 2}]})
+       -> [{"a": 2, "b": 2}]
+
+
+
+
+

8.10. Pipe Expressions

+
+
+
    pipeExpression = expression '|' expression
+
+
+
+

A pipe expression combines two expressions, separated by the pipe (|) character. +It is similar to a chained expression with two distinctions:

+
+
+
    +
  1. +

    Any expression can be used on the right hand side. A chained expression +restricts the type of expression that can be used on the right hand side.

    +
  2. +
  3. +

    A pipe expression stops projections on the left hand side from +propagating to the right hand side. If the left expression creates a +projection, the right hand side will receive the array underlying the projection.

    +
  4. +
+
+
+

For example, given the following data

+
+
+
+
    {"foo": [{"bar": ["first1", "second1"]}, {"bar": ["first2", "second2"]}]}
+
+
+
+

The expression foo[*].bar gives the result of

+
+
+
+
    [
+        [
+            "first1",
+            "second1"
+        ],
+        [
+            "first2",
+            "second2"
+        ]
+    ]
+
+
+
+

The first part of the expression, foo[*], creates a projection. At this +point, the remaining expression, bar is projected onto each element of the +array created from foo[*]. If you project the [0] expression, you will +get the first element from each sub array. The expression foo[*].bar[0] +will return

+
+
+
+
    ["first1", "first2"]
+
+
+
+

If you instead wanted only the first sub array, ["first1", "second1"], you +can use a pipe expression.

+
+
+
+
    foo[*].bar[0] -> ["first1", "first2"]
+    foo[*].bar | [0] -> ["first1", "second1"]
+
+
+

Examples

+
+
+
   eval(foo | bar, {"foo": {"bar": "baz"}}) -> "baz"
+   eval(foo[*].bar | [0], {
+       "foo": [{"bar": ["first1", "second1"]},
+               {"bar": ["first2", "second2"]}]}) -> ["first1", "second1"]
+   eval(foo | [0], {"foo": [0, 1, 2]}) -> 0
+
+
+
+
+
+
+

9. Functions

+
+
+
+
functionExpression
+  : NAME '(' functionArg (',' functionArg)* ')'
+  | NAME '(' ')'
+  ;
+
+functionArg
+  : expression
+  | expressionType
+  ;
+
+expressionType : '&' expression ;
+
+
+
+

json-formula has a robust set of built-in functions. Each function has a signature +that defines the expected types of the input and the type of the returned +output.

+
+
+
+
    return_type function_name(type $argname)
+    return_type function_name2(type1|type2 $argname)
+
+
+
+

9.1. Function parameters

+
+

Functions support the set of standard json-formula data types. If the parameters cannot be coerced to match the types specified in the signature, a TypeError error occurs.

+
+
+

As a shorthand, the type any is used to indicate that the function argument can be +any of (array|object|number|string|boolean|null).

+
+
+

The expression type, (denoted by &expression), is used to specify an +expression that is not immediately evaluated. Instead, a reference to that +expression is provided to the function. The function can then apply the expression reference as needed. It is semantically similar +to an anonymous function. See the sortBy() function for an example of the expression type.

+
+
+

Function parameters can either have a specific arity or be variadic with a minimum +number of arguments. If a functionExpression is encountered where the +arity does not match, or the minimum number of arguments for a variadic function +is not provided, or too many arguments are provided, then a +FunctionError error is raised.

+
+
+

The result of the functionExpression is the result returned by the +function call. If a functionExpression is evaluated for a function that +does not exist, a FunctionError error is raised.

+
+
+

9.1.1. Array Parameters

+
+

Many functions that process scalar values also allow for the processing of arrays of values. For example, the round() function may be called to process a single value: round(1.2345, 2) or to process an array of values: round([1.2345, 2.3456], 2). The first call will return a single value, the second call will return an array of values. +When processing arrays of values, and where there is more than one parameter, each parameter is converted to an array so that the function processes each value in the set of arrays. From our example above, the call to round([1.2345, 2.3456], 2) would be processed as if it were round([1.2345, 2.3456], [2, 2]), and the result would be the same as: [round(1.2345, 2), round(2.3456, 2)].

+
+
+

Functions that accept array parameters will also accept nested arrays. Aggregating functions (min(), max(), avg(), sum(), etc.) will flatten nested arrays. e.g. avg([2.1, 3.1, [4.1, 5.1]]) will be processed as avg([2.1, 3.1, 4.1, 5.1]) and return 3.6.

+
+
+

Non-aggregating functions will return the same array hierarchy. e.g.

+
+
+

upper(["a", ["b"]]) ⇒ ["A", ["B"]] +round([2.12, 3.12, [4.12, 5.12]], 1) will be processed as round([2.12, 3.12, [4.12, 5.12]], [1, 1, [1, 1]]) and return [2.1, 3.1, [4.1, 5.1]]

+
+
+

These array balancing rules apply when any parameter is an array:

+
+
+
    +
  • +

    All parameters will be treated as arrays

    +
  • +
  • +

    Any scalar parameters will be converted to an array by repeating the scalar value to the length of the longest array

    +
  • +
  • +

    All array parameters will be padded to the length of the longest array by adding null values

    +
  • +
  • +

    The function will return an array which is the result of iterating over the elements of the arrays and applying the function logic on the values at the same index.

    +
  • +
+
+
+

With nested arrays:

+
+
+
    +
  • +

    Nested arrays will be flattened for aggregating functions

    +
  • +
  • +

    Non-aggregating functions will preserve the array hierarchy and will apply the balancing rules to each element of the nested arrays

    +
  • +
+
+
+
+
+

9.2. Function evaluation

+
+

Functions are evaluated in applicative order: +- Each argument must be an expression +- Each argument expression must be evaluated before evaluating the +function +- Each argument expression result must be coerced to the expected type +- If coercion is not possible, a TypeError error is raised +- The function is then called with the evaluated function arguments.

+
+
+

The one exception to this rule is the if(expr, result1, result2) function. In this case either the result1 expression or the result2 expression is evaluated, depending on the outcome of expr.

+
+
+

Consider this example using the abs() function. Given:

+
+
+
+
    {"foo": -1, "bar": "2"}
+
+
+
+

Evaluating abs(foo) works as follows:

+
+
+
    +
  1. +

    Evaluate the input argument against the current data:

    +
    +
    +
         eval(foo, {"foo": -1, "bar": "2"}) -> -1
    +
    +
    +
  2. +
  3. +

    Coerce the type of the resolved argument if needed. In this case -1 is of type number so no coercion is needed.

    +
  4. +
  5. +

    Validate the type of the coerced argument. In this case -1 is of type number so it passes the type check.

    +
  6. +
  7. +

    Call the function with the resolved argument:

    +
    +
    +
         abs(-1) -> 1
    +
    +
    +
  8. +
+
+
+

Below is the same steps for evaluating abs(bar):

+
+
+
    +
  1. +

    Evaluate the input argument against the current data:

    +
    +
    +
         eval(bar, {"foo": -1, "bar": "2"}) -> "2"
    +
    +
    +
  2. +
  3. +

    Attempt to coerce the result to the required number type. In this case, coerce "2" to 2.

    +
  4. +
  5. +

    Validate the type of the coerced argument. In this case 2 is of type number so it passes the type check.

    +
  6. +
  7. +

    Call the function with the resolved and coerced argument:

    +
    +
    +
         abs(2) -> 2
    +
    +
    +
  8. +
+
+
+

Function expressions are allowed as the child element of a chained expression. +The function is then evaluated in the context of the parent expression result. For example: [1,2,3].sum(@) → 6.

+
+
+

When the parent expression is a projection a chained function expression +will be applied to every element in the projection. For example, given the input +data of ["1", "2", "3", "notanumber", true], the following expression can +be used to convert all elements to numbers:

+
+
+
+
    eval([].toNumber(@), ["1", "2", "3", "notanumber", null, true]) -> [1,2,3,null,0,1]
+
+
+
+
+

9.3. Function Reference

+ +
+

9.3.1. abs

+
+

abs(value) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Find the absolute (non-negative) value of the provided +argument value.

+
+
Returns
+
+

number | Array.<number> - If value < 0, returns +-value, otherwise returns value

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

value

number | Array.<number>

A numeric value

+
+
+
+
+

Example

+
+
+
+
abs(-1) // returns 1
+
+
+
+
+

9.3.2. acos

+
+

acos(cosine) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Compute the inverse cosine (in radians) of a number.

+
+
Returns
+
+

number | Array.<number> - The inverse cosine angle in +radians between 0 and PI

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

cosine

number | Array.<number>

A number between -1 and 1, +inclusive, representing the angle’s cosine value.

+
+
+
+
+

Example

+
+
+
+
acos(0) => 1.5707963267948966
+
+
+
+
+

9.3.3. and

+
+

and(firstOperand, […additionalOperands]) ⇒ boolean

+
+
+
+
Description
+
+

Finds the logical AND result of all parameters. If the +parameters are not boolean they will be cast to +boolean. Note the related And Operator.

+
+
Returns
+
+

boolean - The logical result of applying AND to all +parameters

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

firstOperand

any

logical expression

[…additionalOperands]

any

any number of additional expressions

+
+
+
+
+

Example

+
+
+
+
and(10 > 8, length("foo") < 5) // returns true
+and(`null`, length("foo") < 5) // returns false
+
+
+
+
+

9.3.4. asin

+
+

asin(sine) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Compute the inverse sine (in radians) of a number.

+
+
Returns
+
+

number | Array.<number> - The inverse sine angle in +radians between -PI/2 and PI/2

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

sine

number | Array.<number>

A number between -1 and 1, +inclusive, representing the angle’s sine value.

+
+
+
+
+

Example

+
+
+
+
Math.asin(0) => 0
+
+
+
+
+

9.3.5. atan2

+
+

atan2(y, x) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Compute the angle in the plane (in radians) between the +positive x-axis and the ray from (0, 0) to the point (x, y)

+
+
Returns
+
+

number | Array.<number> - The angle in radians (between +-PI and PI), between the positive x-axis and the ray from (0, 0) to the +point (x, y).

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

y

number | Array.<number>

The y coordinate of the point

x

number | Array.<number>

The x coordinate of the point

+
+
+
+
+

Example

+
+
+
+
atan2(20,10) => 1.1071487177940904
+
+
+
+
+

9.3.6. avg

+
+

avg(elements) ⇒ number

+
+
+
+
Description
+
+

Finds the average of the elements in an array. Non-numeric +values (text, boolean, null, object) are ignored. If there are nested +arrays, they are flattened. If the array is empty, an evaluation error +is thrown

+
+
Returns
+
+

number - average value

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

elements

Array.<any>

array of values

+
+
+
+
+

Example

+
+
+
+
avg([1, 2, 3]) // returns 2
+
+
+
+
+

9.3.7. avgA

+
+

avgA(elements) ⇒ number

+
+
+
+
Description
+
+

Finds the average of the elements in an array, converting +strings and booleans to number. If any conversions to number fail, a +type error is thrown. If there are nested arrays, they are flattened. If +the array is empty, an evaluation error is thrown

+
+
Returns
+
+

number - average value

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

elements

Array.<number>

array of numeric values

+
+
+
+
+

Example

+
+
+
+
avgA([1, 2, "3", null()]) // returns 2
+
+
+
+
+

9.3.8. casefold

+
+

casefold(input) ⇒ string | Array.<string>

+
+
+
+
Description
+
+

Generates a lower-case string of the input string using +locale-specific mappings. e.g. Strings with German letter ß (eszett) can +be compared to "ss"

+
+
Returns
+
+

string | Array.<string> - A new string converted to +lower case

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

input

string | Array.<string>

string to casefold

+
+
+
+
+

Example

+
+
+
+
casefold("AbC") // returns "abc"
+
+
+
+
+

9.3.9. ceil

+
+

ceil(num) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Finds the next highest integer value of the argument num +by rounding up if necessary. i.e. ceil() rounds toward positive +infinity.

+
+
Returns
+
+

integer | Array.<integer> - The smallest integer +greater than or equal to num

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

num

number | Array.<number>

numeric value

+
+
+
+
+

Example

+
+
+
+
ceil(10) // returns 10
+ceil(10.4) // return 11
+
+
+
+
+

9.3.10. codePoint

+
+

codePoint(str) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Retrieve the first code point from a string

+
+
Returns
+
+

integer | Array.<integer> - Unicode code point value. +If the input string is empty, returns null.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

str

string | Array.<string>

source string.

+
+
+
+
+

Example

+
+
+
+
codePoint("ABC") // 65
+
+
+
+
+

9.3.11. contains

+
+

contains(subject, search) ⇒ boolean

+
+
+
+
Description
+
+

Determines if the given subject contains search. If +subject is an array, this function returns true if one of the elements +in the array is equal to the search value. If subject is a string, +return true if the string contains the search value.

+
+
Returns
+
+

boolean - true if found

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

subject

array | string

The element to be searched

search

any

element to find. If subject is an array, search for an +exact match for search in the array. If subject is a string, +search must also be a string.

+
+
+
+
+

Example

+
+
+
+
contains([1, 2, 3, 4], 2) // returns true
+contains([1, 2, 3, 4], -1) // returns false
+contains("Abcd", "d") // returns true
+contains("Abcd", "x") // returns false
+
+
+
+
+

9.3.12. cos

+
+

cos(angle) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Compute the cosine (in radians) of a number.

+
+
Returns
+
+

number | Array.<number> - The cosine of the angle, +between -1 and 1, inclusive.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

angle

number | Array.<number>

A number representing an angle in +radians

+
+
+
+
+

Example

+
+
+
+
cos(1.0471975512) => 0.4999999999970535
+
+
+
+
+

9.3.13. datedif

+
+

datedif(start_date, end_date, unit) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Return difference between two date values. The measurement +of the difference is determined by the unit parameter. One of:

+
+
    +
  • +

    y the number of whole years between start_date and end_date

    +
  • +
  • +

    m the number of whole months between start_date and end_date.

    +
  • +
  • +

    d the number of days between start_date and end_date

    +
  • +
  • +

    ym the number of whole months between start_date and end_date +after subtracting whole years.

    +
  • +
  • +

    yd the number of days between start_date and end_date, assuming +start_date and end_date were no more than one year apart

    +
  • +
+
+
+
Returns
+
+

integer | Array.<integer> - The number of +days/months/years difference

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

start_date

number | Array.<number>

The starting +date/time value. Date/time values can be +generated using the datetime, toDate, +today, now and time functions.

end_date

number | Array.<number>

The end +date/time value – must be greater or equal to +start_date. If not, an error will be thrown.

unit

string | Array.<string>

Case-insensitive string +representing the unit of time to measure. An unrecognized unit will +result in an error.

+
+
+
+
+

Example

+
+
+
+
datedif(datetime(2001, 1, 1), datetime(2003, 1, 1), "y") // returns 2
+datedif(datetime(2001, 6, 1), datetime(2003, 8, 15), "D") // returns 805
+// 805 days between June 1, 2001, and August 15, 2003
+datedif(datetime(2001, 6, 1), datetime(2003, 8, 15), "YD") // returns 75
+// 75 days between June 1 and August 15, ignoring the years of the dates (75)
+
+
+
+
+

9.3.14. datetime

+
+

datetime(year, month, day, [hours], [minutes], [seconds], +[milliseconds]) ⇒ number

+
+
+
+
Description
+
+

Generate a date/time value from individual date/time +parts. If any of the units are greater than their normal range, the +overflow will be added to the next greater unit. e.g. specifying 25 +hours will increment the day value by 1. Similarly, negative values will +decrement the next greater unit. e.g. datetime(year, month, day - 30) +will return a date 30 days earlier.

+
+
Returns
+
+

number - A date/time value to be +used with other date/time functions

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

year

integer

The year to use for date construction. Values from 0 +to 99 map to the years 1900 to 1999. All other values are the actual +year

month

integer

The month: beginning with 1 for January to 12 for +December.

day

integer

The day of the month.

[hours]

integer

0

Integer value between 0 and 23 representing the +hour of the day.

[minutes]

integer

0

Integer value representing the minute segment of +a time.

[seconds]

integer

0

Integer value representing the second segment of +a time.

[milliseconds]

integer

0

Integer value representing the millisecond +segment of a time.

+
+
+
+
+

Example

+
+
+
+
datetime(2010, 10, 10) // returns representation of October 10, 2010
+datetime(2010, 2, 28) // returns representation of February 28, 2010
+datetime(2023,13,5) | year(@) & "/" & month(@) // returns 2024/1
+
+
+
+
+

9.3.15. day

+
+

day(date) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Finds the day of the month for a date value

+
+
Returns
+
+

integer | Array.<integer> - The day of the month +ranging from 1 to 31.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

date

number | Array.<number>

date/time +value generated using the datetime, +toDate, today, now and +time functions.

+
+
+
+
+

Example

+
+
+
+
day(datetime(2008,5,23)) // returns 23
+
+
+
+
+

9.3.16. debug

+
+

debug(arg, [displayValue]) ⇒ any

+
+
+
+
Description
+
+

Debug a json-formula expression. The debug() function +allows users to inspect a sub-expression within a formula.

+
+
Returns
+
+

any - The value of the arg parameter

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

arg

any

The expression to return from debug() function, and the +default expression to be debugged. May be any type except an expression.

[displayValue]

any | expression

arg

Optionally override the +value to be debugged. displayValue may be an expression to be +evaluated with the context of arg.

+
+
+
+
+

Example

+
+
+
+
avg(([1,2,3] * [2,3,4]).debug(@)).round(@,3) // 6.667
+avg(debug([1,2,3] * [2,3,4],&"average of: " &toString(@))).round(@,3) // 6.667
+
+
+
+
+

9.3.17. deepScan

+
+

deepScan(object, name) ⇒ Array.<any>

+
+
+
+
Description
+
+

Performs a depth-first search of a nested hierarchy to +return an array of key values that match a name. The name can be +either a key into an object or an array index. This is similar to the +Descendant Accessor operator (..) from +E4X.

+
+
Returns
+
+

Array.<any> - The array of matched elements

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

object

object | array | null

The starting object or array +where we start the search

name

string | integer

The name (or index position) of the +elements to find. If name is a string, search for nested objects with +a matching key. If name is an integer, search for nested arrays with a +matching index.

+
+
+
+
+

Example

+
+
+
+
deepScan({a : {b1 : {c : 2}, b2 : {c : 3}}}, "c") // returns [2, 3]
+
+
+
+
+

9.3.18. endsWith

+
+

endsWith(subject, suffix) ⇒ boolean | Array.<boolean>

+
+
+
+
Description
+
+

Determines if the subject string ends with a specific +suffix

+
+
Returns
+
+

boolean | Array.<boolean> - true if the suffix value +is at the end of the subject

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

subject

string | Array.<string>

source string in which to +search

suffix

string | Array.<string>

search string

+
+
+
+
+

Example

+
+
+
+
endsWith("Abcd", "d") // returns true
+endsWith("Abcd", "A") // returns false
+
+
+
+
+

9.3.19. entries

+
+

entries(obj) ⇒ Array.<any>

+
+
+
+
Description
+
+

Returns an array of [key, value] pairs from an object or +array. The fromEntries() function may be used to convert an array to +an object.

+
+
Returns
+
+

Array.<any> - an array of arrays where each child array has +two elements representing the key and value of a pair

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

obj

object | array

source object or array

+
+
+
+
+

Example

+
+
+
+
entries({a: 1, b: 2}) // returns [["a", 1], ["b", 2]]
+entries([4,5]) // returns [["0", 4],["1", 5]]
+
+
+
+
+

9.3.20. eomonth

+
+

eomonth(startDate, monthAdd) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Finds the date value of the end of a month, given +startDate plus monthAdd months

+
+
Returns
+
+

number | Array.<number> - the date of the last day of +the month

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

startDate

number | Array.<number>

The base date to start from. +Date/time values can be generated using the +datetime, toDate, today, +now and time functions.

monthAdd

integer | Array.<integer>

Number of months to add to +start date

+
+
+
+
+

Example

+
+
+
+
eomonth(datetime(2011, 1, 1), 1) | [month(@), day(@)] // returns [2, 28]
+eomonth(datetime(2011, 1, 1), -3) | [month(@), day(@)] // returns [10, 31]
+
+
+
+
+

9.3.21. exp

+
+

exp(x) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Finds e (the base of natural logarithms) raised to a +power. (i.e. e^x)

+
+
Returns
+
+

number | Array.<number> - e (the base of natural +logarithms) raised to power x

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

x

number | Array.<number>

A numeric expression representing the +power of e.

+
+
+
+
+

Example

+
+
+
+
exp(10) // returns 22026.465794806718
+
+
+
+
+

9.3.22. false

+
+

false() ⇒ boolean

+
+
+
+
Description
+
+

Return constant boolean false value. Expressions may also +use the JSON literal: `false`

+
+
Returns
+
+

boolean - constant boolean value false

+
+
+
+
+
+

9.3.23. find

+
+

find(findText, withinText, [start]) ⇒ integer | null | +Array.<integer>

+
+
+
+
Description
+
+

Finds and returns the index of query in text from a start +position

+
+
Returns
+
+

integer | null | Array.<integer> - The position +of the found string, null if not found.

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

findText

string | Array.<string>

string to search

withinText

string | Array.<string>

text to be searched

[start]

integer | Array.<integer>

0

zero-based position to +start searching. If specified, start must be greater than or equal to +0

+
+
+
+
+

Example

+
+
+
+
find("m", "abm") // returns 2
+find("M", "abMcdM", 3) // returns 5
+find("M", "ab") // returns `null`
+find("M", "abMcdM", 2) // returns 2
+
+
+
+
+

9.3.24. floor

+
+

floor(num) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Calculates the next lowest integer value of the argument +num by rounding down if necessary. i.e. floor() rounds toward negative +infinity.

+
+
Returns
+
+

integer | Array.<integer> - The largest integer smaller +than or equal to num

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

num

number | Array.<number>

numeric value

+
+
+
+
+

Example

+
+
+
+
floor(10.4) // returns 10
+floor(10) // returns 10
+
+
+
+
+

9.3.25. fromCodePoint

+
+

fromCodePoint(codePoint) ⇒ string

+
+
+
+
Description
+
+

Create a string from a code point.

+
+
Returns
+
+

string - A string from the given code point(s)

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

codePoint

integer | Array.<integer>

An integer or array of +integers between 0 and 0x10FFFF (inclusive) representing Unicode code +point(s).

+
+
+
+
+

Example

+
+
+
+
fromCodePoint(65) // "A"
+fromCodePoint(65) == "\u0041" // true
+
+
+
+
+

9.3.26. fromEntries

+
+

fromEntries(pairs) ⇒ object

+
+
+
+
Description
+
+

Returns an object by transforming a list of key-value +pairs into an object. fromEntries() is the inverse operation of +entries(). If the nested arrays are not of the form: [key, value] +(where key is a string), an error will be thrown.

+
+
Returns
+
+

object - An object constructed from the provided key-value +pairs

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

pairs

Array.<any>

A nested array of key-value pairs to create the +object from The nested arrays must have exactly two values, where the +first value is a string. If a key is specified more than once, the last +occurrence will override any previous value.

+
+
+
+
+

Example

+
+
+
+
fromEntries([["a", 1], ["b", 2]]) // returns {a: 1, b: 2}
+
+
+
+
+

9.3.27. fround

+
+

fround(num) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Compute the nearest 32-bit single precision float +representation of a number

+
+
Returns
+
+

number | Array.<number> - The rounded representation of +num

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

num

number | Array.<number>

input to be rounded

+
+
+
+
+

Example

+
+
+
+
fround(2147483650.987) => 2147483648
+fround(100.44444444444444444444) => 100.44444274902344
+
+
+
+
+

9.3.28. hasProperty

+
+

hasProperty(subject, name) ⇒ boolean

+
+
+
+
Description
+
+

Determine if an object has a property or if an array index +is in range.

+
+
Returns
+
+

boolean - true if the element exists

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

subject

object | array | null

source object or array. +When querying for hidden properties, subject +may be any data type.

name

string | integer

The name (or index position) of the +element to find. if subject is an array, name must be an integer; if +subject is an object, name must be a string.

+
+
+
+
+

Example

+
+
+
+
hasProperty({a: 1, b: 2}, "a") // returns true
+hasProperty(["apples", "oranges"], 3) // returns false
+hasProperty(`null`, "a") // returns false
+
+
+
+
+

9.3.29. hour

+
+

hour(date) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Extract the hour from a date/time +value

+
+
Returns
+
+

integer | Array.<integer> - value between 0 and 23

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

date

number | Array.<number>

The datetime/time for which the +hour is to be returned. Date/time values can be generated using the +datetime, toDate, today, +now and time functions.

+
+
+
+
+

Example

+
+
+
+
hour(datetime(2008,5,23,12, 0, 0)) // returns 12
+hour(time(12, 0, 0)) // returns 12
+
+
+
+
+

9.3.30. if

+
+

if(condition, result1, result2) ⇒ any

+
+
+
+
Description
+
+

Return one of two values result1 or result2, depending +on the condition

+
+
Returns
+
+

any - either result1 or result2

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

condition

any

boolean result of a logical expression

result1

any

if condition is true

result2

any

if condition is false

+
+
+
+
+

Example

+
+
+
+
if(true(), 1, 2) // returns 1
+if(false(), 1, 2) // returns 2
+
+
+
+
+

9.3.31. join

+
+

join(array, glue) ⇒ string

+
+
+
+
Description
+
+

Combines all the elements from the provided array, joined +together using the glue argument as a separator between each array +element.

+
+
Returns
+
+

string - String representation of the array

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

array

Array.<any>

array of values that will be converted to strings +using toString()

glue

string

+
+
+
+
+

Example

+
+
+
+
join(["a", "b", "c"], ",") // returns "a,b,c"
+join(["apples", "bananas"], " and ") // returns "apples and bananas"
+join([1, 2, 3, null()], "|") // returns "1|2|3|null"
+
+
+
+
+

9.3.32. keys

+
+

keys(obj) ⇒ array

+
+
+
+
Description
+
+

Generates an array of the keys of the input object. If the +object is null, the value return an empty array

+
+
Returns
+
+

array - the array of all the key names

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

obj

object

the object to examine

+
+
+
+
+

Example

+
+
+
+
keys({a : 3, b : 4}) // returns ["a", "b"]
+
+
+
+
+

9.3.33. left

+
+

left(subject, [elements]) ⇒ string | array

+
+
+
+
Description
+
+

Return a substring from the start of a string or the +left-most elements of an array

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

subject

string | array

The source text/array of code +points/elements

[elements]

integer

1

number of elements to pick

+
+
+
+
+

Example

+
+
+
+
left("Sale Price", 4) // returns "Sale"
+left("Sweden") // returns "S"
+left([4, 5, 6], 2) // returns [4, 5]
+
+
+
+
+

9.3.34. length

+
+

length(subject) ⇒ integer

+
+
+
+
Description
+
+

Calculates the length of the input argument based on +types:

+
+
    +
  • +

    string: returns the number of unicode code points

    +
  • +
  • +

    array: returns the number of array elements

    +
  • +
  • +

    object: returns the number of key-value pairs

    +
  • +
+
+
+
Returns
+
+

integer - the length of the input subject

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

subject

string | array | object

subject whose length to +calculate

+
+
+
+
+

Example

+
+
+
+
length(`[]`) // returns 0
+length("") // returns 0
+length("abcd") // returns 4
+length([1, 2, 3, 4]) // returns 4
+length(`{}`) // returns 0
+length({a : 3, b : 4}) // returns 2
+
+
+
+
+

9.3.35. log

+
+

log(num) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Compute the natural logarithm (base e) of a number

+
+
Returns
+
+

number | Array.<number> - The natural log value

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

num

number | Array.<number>

A number greater than zero

+
+
+
+
+

Example

+
+
+
+
log(10) // 2.302585092994046
+
+
+
+
+

9.3.36. log10

+
+

log10(num) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Compute the base 10 logarithm of a number.

+
+
Returns
+
+

number | Array.<number> - The base 10 log result

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

num

number | Array.<number>

A number greater than or equal to +zero

+
+
+
+
+

Example

+
+
+
+
log10(100000) // 5
+
+
+
+
+

9.3.37. lower

+
+

lower(input) ⇒ string | Array.<string>

+
+
+
+
Description
+
+

Converts all the alphabetic code points in a string to +lowercase.

+
+
Returns
+
+

string | Array.<string> - the lower case value of the +input string

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

input

string | Array.<string>

input string

+
+
+
+
+

Example

+
+
+
+
lower("E. E. Cummings") // returns "e. e. cummings"
+
+
+
+
+

9.3.38. map

+
+

map(elements, expr) ⇒ array

+
+
+
+
Description
+
+

Apply an expression to every element in an array and +return the array of results. An input array of length N will return an +array of length N.

+
+
Returns
+
+

array - the mapped array

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

elements

array

array of elements to process

expr

expression

expression to evaluate

+
+
+
+
+

Example

+
+
+
+
map([1, 2, 3, 4], &(@ + 1)) // returns [2, 3, 4, 5]
+map(["doe", "nick", "chris"], &length(@)) // returns [3, 4, 5]
+
+
+
+
+

9.3.39. max

+
+

max(…collection) ⇒ number

+
+
+
+
Description
+
+

Calculates the largest value in the input numbers. Any +values that are not numbers (null, boolean, strings, objects) will be +ignored. If any parameters are arrays, the arrays will be flattened. If +no numbers are provided, the function will return zero.

+
+
Returns
+
+

number - the largest value found

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

…collection

array | any

values/array(s) in which the maximum +element is to be calculated

+
+
+
+
+

Example

+
+
+
+
max([1, 2, 3], [4, 5, 6]) // returns 6
+max([\"a\", \"a1\", \"b\"], null(), true())) // returns 0
+max(8, 10, 12, "14") // returns 12
+
+
+
+
+

9.3.40. maxA

+
+

maxA(…collection) ⇒ number

+
+
+
+
Description
+
+

Calculates the largest value in the input values, coercing +parameters to numbers. Null values are ignored. If any parameters cannot +be converted to a number, the function will fail with a type error. If +any parameters are arrays, the arrays will be flattened. If no numbers +are provided, the function will return zero.

+
+
Returns
+
+

number - the largest value found

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

…collection

any

values/array(s) in which the maximum element is to be +calculated

+
+
+
+
+

Example

+
+
+
+
maxA([1, 2, 3], [4, 5, 6]) // returns 6
+maxA(["a", "a1", "b", null()]) // error
+maxA(8, 10, 12, "14") // returns 14
+
+
+
+
+

9.3.41. merge

+
+

merge(…args) ⇒ object

+
+
+
+
Description
+
+

Accepts one or more objects, and returns a single object +with all objects merged. The first object is copied, and then and each +key value pair from each subsequent object are added to the first +object. Duplicate keys in subsequent objects will override those found +in earlier objects.

+
+
Returns
+
+

object - The combined object

+
+
Parameters
+
+ ++++ + + + + + + + + + + + + +
ParamType

…args

object

+
+
+
+
+

Example

+
+
+
+
merge({a: 1, b: 2}, {c : 3, d: 4}) // returns {a :1, b: 2, c: 3, d: 4}
+merge({a: 1, b: 2}, {a : 3, d: 4}) // returns {a :3, b: 2, d: 4}
+
+
+
+
+

9.3.42. mid

+
+

mid(subject, startPos, length) ⇒ string | array

+
+
+
+
Description
+
+

Extracts a substring from text, or a subset from an array.

+
+
Returns
+
+

string | array - The resulting substring or array +subset of elements

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

subject

string | array

the text string or array of elements +from which to extract.

startPos

integer

the zero-based position of the first code point or +element to extract.

length

integer

The number of code points or elements to return from +the string or array. If greater then the length of subject the length +of the subject is used.

+
+
+
+
+

Example

+
+
+
+
mid("Fluid Flow", 0, 5) // returns "Fluid"
+mid("Fluid Flow", 6, 20) // returns "Flow"
+mid("Fluid Flow", 20, 5) // returns ""
+mid([0,1,2,3,4,5,6,7,8,9], 2, 3) // returns [2,3,4]
+
+
+
+
+

9.3.43. millisecond

+
+

millisecond(date) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Extract the milliseconds of the time value in a +date/time value.

+
+
Returns
+
+

integer | Array.<integer> - The number of milliseconds: +0 through 999

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

date

number | Array.<number>

datetime/time for which the +millisecond is to be returned. Date/time values can be generated using +the datetime, toDate, today, +now and time functions.

+
+
+
+
+

Example

+
+
+
+
millisecond(datetime(2008, 5, 23, 12, 10, 53, 42)) // returns 42
+
+
+
+
+

9.3.44. min

+
+

min(…collection) ⇒ number

+
+
+
+
Description
+
+

Calculates the smallest value in the input numbers. Any +values that are not numbers (null, boolean, string, object) will be +ignored. If any parameters are arrays, the arrays will be flattened. If +no numbers are provided, the function will return zero.

+
+
Returns
+
+

number - the smallest value found

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

…collection

Array.<any> | any

Values/arrays to search for the +minimum value

+
+
+
+
+

Example

+
+
+
+
min([1, 2, 3], [4, 5, 6]) // returns 1
+min("4", 8, 10, 12, null()) // returns 8
+
+
+
+
+

9.3.45. minA

+
+

minA(…collection) ⇒ number

+
+
+
+
Description
+
+

Calculates the smallest value in the input values, +coercing parameters to numbers. Null values are ignored. If any +parameters cannot be converted to a number, the function will fail with +a type error. If any parameters are arrays, the arrays will be +flattened. If no numbers are provided, the function will return zero.

+
+
Returns
+
+

number - the largest value found

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

…collection

Array.<any> | any

values/array(s) in which the +maximum element is to be calculated

+
+
+
+
+

Example

+
+
+
+
minA([1, 2, 3], [4, 5, 6]) // returns 1
+minA("4", 8, 10, 12, null()) // returns 4
+
+
+
+
+

9.3.46. minute

+
+

minute(date) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Extract the minute (0 through 59) from a +date/time value

+
+
Returns
+
+

integer | Array.<integer> - Number of minutes in the +time portion of the date/time value

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

date

number | Array.<number>

A datetime/time value. Date/time +values can be generated using the datetime, +toDate, today, now and +time functions.

+
+
+
+
+

Example

+
+
+
+
minute(datetime(2008,5,23,12, 10, 0)) // returns 10
+minute(time(12, 10, 0)) // returns 10
+
+
+
+
+

9.3.47. mod

+
+

mod(dividend, divisor) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Return the remainder when one number is divided by another +number.

+
+
Returns
+
+

number | Array.<number> - Computes the remainder of +dividend/divisor. If dividend is negative, the result will also be +negative. If dividend is zero, an error is thrown.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

dividend

number | Array.<number>

The number for which to find +the remainder.

divisor

number | Array.<number>

The number by which to divide +number.

+
+
+
+
+

Example

+
+
+
+
mod(3, 2) // returns 1
+mod(-3, 2) // returns -1
+
+
+
+
+

9.3.48. month

+
+

month(date) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Finds the month of a date.

+
+
Returns
+
+

integer | Array.<integer> - The month number value, +ranging from 1 (January) to 12 (December)

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

date

number | Array.<number>

source date/time value. Date/time values can be generated using the +datetime, toDate, today, +now and time functions.

+
+
+
+
+

Example

+
+
+
+
month(datetime(2008,5,23)) // returns 5
+
+
+
+
+

9.3.49. not

+
+

not(value) ⇒ boolean

+
+
+
+
Description
+
+

Compute logical NOT of a value. If the parameter is not +boolean it will be cast to boolean Note the +related unary NOT operator.

+
+
Returns
+
+

boolean - The logical NOT applied to the input parameter

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

value

any

any data type

+
+
+
+
+

Example

+
+
+
+
not(length("bar") > 0) // returns false
+not(false()) // returns true
+not("abcd") // returns false
+not("") // returns true
+
+
+
+
+

9.3.50. notNull

+
+

notNull(…argument) ⇒ any

+
+
+
+
Description
+
+

Finds the first argument that does not resolve to null. +This function accepts one or more arguments, and will evaluate them in +order until a non-null argument is encountered. If all arguments values +resolve to null, then return a null value.

+
+
Parameters
+
+ ++++ + + + + + + + + + + + + +
ParamType

…argument

any

+
+
+
+
+

Example

+
+
+
+
notNull(1, 2, 3, 4, `null`) // returns 1
+notNull(`null`, 2, 3, 4, `null`) // returns 2
+
+
+
+
+

9.3.51. now

+
+

now() ⇒ number

+
+
+
+
Description
+
+

Retrieve the current date/time.

+
+
Returns
+
+

number - representation of the current date/time value.

+
+
+
+
+
+

9.3.52. null

+
+

null() ⇒ boolean

+
+
+
+
Description
+
+

Return constant null value. Expressions may also use the +JSON literal: `null`

+
+
Returns
+
+

boolean - True

+
+
+
+
+
+

9.3.53. or

+
+

or(first, […operand]) ⇒ boolean

+
+
+
+
Description
+
+

Determines the logical OR result of a set of parameters. +If the parameters are not boolean they will be +cast to boolean. Note the related +Or Operator.

+
+
Returns
+
+

boolean - The logical result of applying OR to all parameters

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

first

any

logical expression

[…operand]

any

any number of additional expressions

+
+
+
+
+

Example

+
+
+
+
or((x / 2) == y, (y * 2) == x) // true
+
+
+
+
+

9.3.54. power

+
+

power(a, x) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Computes a raised to a power x. (a^x)

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

a

number | Array.<number>

The base number – can be any real +number.

x

number | Array.<number>

The exponent to which the base number +is raised.

+
+
+
+
+

Example

+
+
+
+
power(10, 2) // returns 100 (10 raised to power 2)
+
+
+
+
+

9.3.55. proper

+
+

proper(text) ⇒ string | Array.<string>

+
+
+
+
Description
+
+

Apply proper casing to a string. Proper casing is where +the first letter of each word is converted to an uppercase letter and +the rest of the letters in the word converted to lowercase. Words are +demarcated by whitespace, punctuation, or numbers. Specifically, any +character(s) matching the regular expression: [\s\d\p{P}]+.

+
+
Returns
+
+

string | Array.<string> - source string with proper +casing applied.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

text

string | Array.<string>

source string

+
+
+
+
+

Example

+
+
+
+
proper("this is a TITLE") // returns "This Is A Title"
+proper("2-way street") // returns "2-Way Street"
+proper("76BudGet") // returns "76Budget"
+
+
+
+
+

9.3.56. random

+
+

random() ⇒ number

+
+
+
+
Description
+
+

Generate a pseudo random number.

+
+
Returns
+
+

number - A value greater than or equal to zero, and less than +one.
+Example

+
+
+
+
+
+
random() // 0.022585461160693265
+
+
+
+
+

9.3.57. reduce

+
+

reduce(elements, expr, initialValue) ⇒ any

+
+
+
+
Description
+
+

Executes a user-supplied reducer expression on each +element of an array, in order, passing in the return value from the +expression from the preceding element. The final result of running the +reducer across all elements of the input array is a single value. The +expression can access the following properties of the current object:

+
+
    +
  • +

    accumulated: accumulated value based on the previous expression. For +the first array element use the initialValue parameter. If not +provided, then null

    +
  • +
  • +

    current: current element to process

    +
  • +
  • +

    index: index of the current element in the array

    +
  • +
  • +

    array: original array

    +
  • +
+
+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

elements

array

array of elements on which the expression will be +evaluated

expr

expression

reducer expression to be executed on each element

initialValue

any

the accumulated value to pass to the first array +element

+
+
+
+
+

Example

+
+
+
+
reduce([1, 2, 3], &(accumulated + current)) // returns 6
+// find maximum entry by age
+reduce(
+  [{age: 10, name: "Joe"},{age: 20, name: "John"}],
+  &max(@.accumulated.age, @.current.age), @[0].age)
+reduce([3, 3, 3], &accumulated * current, 1) // returns 27
+
+
+
+
+

9.3.58. register

+
+

register(functionName, expr) ⇒ Object

+
+
+
+
Description
+
+

Register a function. The registered function may take one +parameter. If more parameters are needed, combine them in an array or +object. A function may not be re-registered with a different definition. +Note that implementations are not required to provide register() in +order to be conformant. Built-in functions may not be overridden.

+
+
Returns
+
+

Object - returns an empty object

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

functionName

string

Name of the function to register. functionName +must begin with an underscore or uppercase letter and follow the regular +expression pattern: +^[_A-Z][_a-zA-Z0-9$]*$

expr

expression

Expression to execute with this function call

+
+
+
+
+

Example

+
+
+
+
register("_product", &@[0] * @[1]) // can now call: _product([2,21]) => returns 42
+register("_ltrim", &split(@,"").reduce(@, &accumulated & current | if(@ = " ", "", @), ""))
+// _ltrim("  abc  ") => returns "abc  "
+
+
+
+
+

9.3.59. registerWithParams

+
+

registerWithParams(functionName, expr) ⇒ Object

+
+
+
+
Description
+
+

Register a function that accepts multiple parameters. A +function may not be re-registered with a different definition. Note that +implementations are not required to provide registerWithParams() in +order to be conformant. Built-in functions may not be overridden.

+
+
Returns
+
+

Object - returns an empty object

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

functionName

string

Name of the function to register. functionName +must begin with an underscore or uppercase letter and follow the regular +expression pattern: +^[_A-Z][_a-zA-Z0-9$]*$

expr

expression

Expression to execute with this function call. +Parameters are passed as an array.

+
+
+
+
+

Example

+
+
+
+
registerWithParams("Product", &@[0] * @[1])
+// can now call: Product(2,21) => returns 42
+registerWithParams(
+  "Ltrim",
+  &split(@[0],"").reduce(@, &accumulated & current | if(@ = " ", "", @), "")
+ )
+// Ltrim("  abc  ") => returns "abc  "
+
+
+
+
+

9.3.60. replace

+
+

replace(subject, start, length, replacement) ⇒ string | array

+
+
+
+
Description
+
+

Generates text (or an array) where we substitute elements +at a given start position and length, with new text (or array elements).

+
+
Returns
+
+

string | array - the resulting text or array

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

subject

string | array

original text or array

start

integer

zero-based index in the original text from where to +begin the replacement. Must be greater than or equal to 0.

length

integer

number of code points to be replaced. If start
+length is greater than the length of subject, all text past start +will be replaced.

replacement

any

Replacement to insert at the start index. If +subject is an array, and replacement is an array, the replacement +array elements will be inserted into the subject array. If subject +is an array and replacement is not an array, the replacement will be +inserted as a single element in subject If subject is a string, the +replacement will be coerced to a string.

+
+
+
+
+

Example

+
+
+
+
replace("abcdefghijk", 5, 5, "*") // returns abcde*k
+replace("2009",2,2,"10") // returns  2010
+replace("123456",0,3,"@") // returns @456
+replace(["blue","black","white","red"], 1, 2, ["green"]) // returns ["blue","green","red"]
+
+
+
+
+

9.3.61. rept

+
+

rept(text, count) ⇒ string | Array.<string>

+
+
+
+
Description
+
+

Return text repeated count times.

+
+
Returns
+
+

string | Array.<string> - Text generated from the +repeated text. if count is zero, returns an empty string.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

text

string | Array.<string>

text to repeat

count

integer | Array.<integer>

number of times to repeat the +text. Must be greater than or equal to 0.

+
+
+
+
+

Example

+
+
+
+
rept("x", 5) // returns "xxxxx"
+
+
+
+
+

9.3.62. reverse

+
+

reverse(subject) ⇒ array

+
+
+
+
Description
+
+

Reverses the order of an array or the order of code points +in a string

+
+
Returns
+
+

array - The resulting reversed array or string

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

subject

string | array

the source to be reversed

+
+
+
+
+

Example

+
+
+
+
reverse(["a", "b", "c"]) // returns ["c", "b", "a"]
+
+
+
+
+

9.3.63. right

+
+

right(subject, [elements]) ⇒ string | array

+
+
+
+
Description
+
+

Generates a string from the right-most code points of a +string or a subset of elements from the end of an array

+
+
Returns
+
+

string | array - The extracted substring or array +subset Returns null if the number of elements is less than 0

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

subject

string | array

The text/array containing the code +points/elements to extract

[elements]

integer

1

number of elements to pick

+
+
+
+
+

Example

+
+
+
+
right("Sale Price", 4) // returns "rice"
+right("Sweden") // returns "n"
+right([4, 5, 6], 2) // returns [5, 6]
+
+
+
+
+

9.3.64. round

+
+

round(num, [precision]) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Round a number to a specified precision:

+
+
    +
  • +

    If precision is greater than zero, round to the specified number of +decimal places.

    +
  • +
  • +

    If precision is 0, round to the nearest integer.

    +
  • +
  • +

    If precision is less than 0, round to the left of the decimal point.

    +
  • +
+
+
+
Returns
+
+

number | Array.<number> - rounded value. Rounding a +half value will round up.

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

num

number | Array.<number>

number to round

[precision]

integer | Array.<integer>

0

precision to use for +the rounding operation.

+
+
+
+
+

Example

+
+
+
+
round(2.15, 1) // returns 2.2
+round(626.3,-3) // returns 1000 (Rounds 626.3 to the nearest multiple of 1000)
+round(626.3, 0) // returns 626
+round(1.98,-1) // returns 0 (Rounds 1.98 to the nearest multiple of 10)
+round(-50.55,-2) // -100 (round -50.55 to the nearest multiple of 100)
+round(1.95583) // 2
+round(-1.5) // -1
+
+
+
+
+ +
+

search(findText, withinText, [startPos]) ⇒ array

+
+
+
+
Description
+
+

Perform a wildcard search. The search is case-sensitive +and supports two forms of wildcards: * finds a sequence of +code points and ? finds a single code point. To use * or +? or \ as text values, precede them with an escape +(\) character. Note that the wildcard search is not greedy. +e.g. search("a*b", "abb") will return [0, "ab"] Not +[0, "abb"]

+
+
Returns
+
+

array - returns an array with two values:

+
+
    +
  • +

    The start position of the found text and the text string that was +found.

    +
  • +
  • +

    If a match was not found, an empty array is returned.

    +
  • +
+
+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

findText

string | Array.<string>

the search string – which +may include wild cards.

withinText

string | Array.<string>

The string to search.

[startPos]

integer | Array.<integer>

0

The zero-based position +of withinText to start searching. A negative value is not allowed.

+
+
+
+
+

Example

+
+
+
+
search("a?c", "acabc") // returns [2, "abc"]
+
+
+
+
+

9.3.66. second

+
+

second(date) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Extract the seconds of the time value in a +date/time value.

+
+
Returns
+
+

integer | Array.<integer> - The number of seconds: 0 +through 59

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

date

number | Array.<number>

datetime/time for which the second +is to be returned. Date/time values can be generated using the +datetime, toDate, today, +now and time functions.

+
+
+
+
+

Example

+
+
+
+
second(datetime(2008,5,23,12, 10, 53)) // returns 53
+second(time(12, 10, 53)) // returns 53
+
+
+
+
+

9.3.67. sign

+
+

sign(num) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Computes the sign of a number passed as argument.

+
+
Returns
+
+

number | Array.<number> - returns 1 or -1, indicating +the sign of num. If the num is 0, it will return 0.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

num

number | Array.<number>

any number

+
+
+
+
+

Example

+
+
+
+
sign(5) // 1
+sign(-5) // -1
+sign(0) // 0
+
+
+
+
+

9.3.68. sin

+
+

sin(angle) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Computes the sine of a number in radians

+
+
Returns
+
+

number | Array.<number> - The sine of angle, between +-1 and 1, inclusive

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

angle

number | Array.<number>

A number representing an angle in +radians.

+
+
+
+
+

Example

+
+
+
+
sin(0) // 0
+sin(1) // 0.8414709848078965
+
+
+
+
+

9.3.69. sort

+
+

sort(list) ⇒ Array.<any>

+
+
+
+
Description
+
+

This function accepts an array values and returns an array +with the elements in sorted order. If there are mixed data types, the +values will be grouped in order: numbers, strings, booleans, nulls +String sorting is based on code points and is not locale-sensitive. If +the sort encounters any objects or arrays, it will throw an evaluation +error.

+
+
Returns
+
+

Array.<any> - The ordered result

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

list

Array.<any>

to be sorted

+
+
+
+
+

Example

+
+
+
+
sort([1, 2, 4, 3, 1]) // returns [1, 1, 2, 3, 4]
+sort(["20", 20, true(), "100", null(), 100]) // returns [20, 100, "100", "20", true, null]
+
+
+
+
+

9.3.70. sortBy

+
+

sortBy(elements, expr) ⇒ array

+
+
+
+
Description
+
+

Sort an array using an expression to find the sort key. +For each element in the array, the expression is applied and the +resulting value is used as the sort value. If the result of evaluating +the expression against the current array element results in type other +than a number or a string, a TypeError will occur.

+
+
Returns
+
+

array - The sorted array

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

elements

array

Array to be sorted

expr

expression

The comparison expression

+
+
+
+
+

Example

+
+
+
+
// returns ["e", "def", "abcd"]
+sortBy(["abcd", "e", "def"], &length(@))
+
+// returns [{year: 1910}, {year: 2010}, {year: 2020}]
+sortBy([{year: 2010}, {year: 2020}, {year: 1910}], &year)
+
+// returns [5, -10, -11, -15, 30]
+sortBy([-15, 30, -10, -11, 5], &abs(@))
+
+
+
+
+

9.3.71. split

+
+

split(string, separator) ⇒ Array.<string> | +Array.<Array.<string>>

+
+
+
+
Description
+
+

Split a string into an array, given a separator

+
+
Returns
+
+

Array.<string> | Array.<Array.<string>> - The array of +separated strings

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

string

string | Array.<string>

string to split

separator

string | Array.<string>

separator where the split(s) +should occur

+
+
+
+
+

Example

+
+
+
+
split("abcdef", "") // returns ["a", "b", "c", "d", "e", "f"]
+split("abcdef", "e") // returns ["abcd", "f"]
+
+
+
+
+

9.3.72. sqrt

+
+

sqrt(num) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Find the square root of a number

+
+
Returns
+
+

number | Array.<number> - The calculated square root +value

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

num

number | Array.<number>

source number

+
+
+
+
+

Example

+
+
+
+
sqrt(4) // returns 2
+
+
+
+
+

9.3.73. startsWith

+
+

startsWith(subject, prefix) ⇒ boolean | Array.<boolean>

+
+
+
+
Description
+
+

Determine if a string starts with a prefix.

+
+
Returns
+
+

boolean | Array.<boolean> - true if prefix matches +the start of subject

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

subject

string | Array.<string>

string to search

prefix

string | Array.<string>

prefix to search for

+
+
+
+
+

Example

+
+
+
+
startsWith("jack is at home", "jack") // returns true
+
+
+
+
+

9.3.74. stdev

+
+

stdev(values) ⇒ number

+
+
+
+
Description
+
+

Estimates standard deviation based on a sample. stdev +assumes that its arguments are a sample of the entire population. If +your data represents a entire population, then compute the standard +deviation using stdevp. Non-numeric values (text, boolean, +null etc) are ignored. If there are nested arrays, they are flattened.

+
+
Returns
+
+

number - +Standard deviation

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

values

Array.<any>

The array containing numbers comprising the +population. Array size must be greater than 1.

+
+
+
+
+

Example

+
+
+
+
stdev([1345, 1301, 1368]) // returns 34.044089061098404
+stdevp([1345, 1301, 1368]) // returns 27.797
+
+
+
+
+

9.3.75. stdevA

+
+

stdevA(numbers) ⇒ number

+
+
+
+
Description
+
+

Estimates standard deviation based on a sample. stdev +assumes that its arguments are a sample of the entire population. If +your data represents a entire population, then compute the standard +deviation using stdevpA. Nested arrays are flattened. Null values are +ignored. All other parameters are converted to number. If conversion to +number fails, a type error is thrown.

+
+
Returns
+
+

number - +Standard deviation

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

numbers

Array.<number>

The array of numbers comprising the +population. Array size must be greater than 1.

+
+
+
+
+

Example

+
+
+
+
stdevA([1345, "1301", 1368]) // returns 34.044089061098404
+stdevpA([1345, 1301, "1368"]) // returns 27.797
+
+
+
+
+

9.3.76. stdevp

+
+

stdevp(values) ⇒ number

+
+
+
+
Description
+
+

Calculates standard deviation based on the entire +population given as arguments. stdevp assumes that its arguments are +the entire population. If your data represents a sample of the +population, then compute the standard deviation using +stdev. Non-numeric values (text, boolean, null etc) are +ignored. If there are nested arrays, they are flattened.

+
+
Returns
+
+

number - Calculated standard deviation

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

values

Array.<any>

The array containing numbers comprising the +population. An empty array is not allowed.

+
+
+
+
+

Example

+
+
+
+
stdevp([1345, 1301, 1368]) // returns 27.797
+stdev([1345, 1301, 1368]) // returns 34.044
+
+
+
+
+

9.3.77. stdevp

+
+

stdevp(numbers) ⇒ number

+
+
+
+
Description
+
+

Calculates standard deviation based on the entire +population given as arguments. stdevpA assumes that its arguments are +the entire population. If your data represents a sample of the +population, then compute the standard deviation using +[_stdevA]. Nested arrays are flattened. Null values are +ignored. All other parameters are converted to number. If conversion to +number fails, a type error is thrown.

+
+
Returns
+
+

number - Calculated standard deviation

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

numbers

Array.<number>

The array of numbers comprising the +population. An empty array is not allowed.

+
+
+
+
+

Example

+
+
+
+
stdevpA([1345, "1301", 1368]) // returns 27.797
+stdevA([1345, 1301, "1368"]) // returns 34.044
+
+
+
+
+

9.3.78. substitute

+
+

substitute(text, old, new, [which]) ⇒ string | Array.<string>

+
+
+
+
Description
+
+

Generates a string from the input text, with text old +replaced by text new (when searching from the left). If there is no +match, or if old has length 0, text is returned unchanged. Note that +old and new may have different lengths.

+
+
Returns
+
+

string | Array.<string> - replaced string

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

text

string | Array.<string>

The text for which to substitute +code points.

old

string | Array.<string>

The text to replace.

new

string | Array.<string>

The text to replace old with. If +new is an empty string, then occurrences of old are removed from +text.

[which]

integer | Array.<integer>

The zero-based occurrence of +old text to replace with new text. If which parameter is omitted, +every occurrence of old is replaced with new.

+
+
+
+
+

Example

+
+
+
+
substitute("Sales Data", "Sales", "Cost") // returns "Cost Data"
+substitute("Quarter 1, 2001", "1", "2", 1)" // returns "Quarter 1, 2002"
+substitute("Quarter 1, 2011", "1", "2", 2)" // returns "Quarter 1, 2012"
+
+
+
+
+

9.3.79. sum

+
+

sum(collection) ⇒ number

+
+
+
+
Description
+
+

Calculates the sum of the provided array. An empty array +will produce a return value of 0. Any values that are not numbers (null, +boolean, strings, objects) will be ignored. If any parameters are +arrays, the arrays will be flattened.

+
+
Returns
+
+

number - The computed sum

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

collection

Array.<any>

array of values

+
+
+
+
+

Example

+
+
+
+
sum([1, 2, 3]) // returns 6
+
+
+
+
+

9.3.80. tan

+
+

tan(angle) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Computes the tangent of a number in radians

+
+
Returns
+
+

number | Array.<number> - The tangent of angle

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

angle

number | Array.<number>

A number representing an angle in +radians.

+
+
+
+
+

Example

+
+
+
+
tan(0) // 0
+tan(1) // 1.5574077246549023
+
+
+
+
+

9.3.81. time

+
+

time(hours, [minutes], [seconds]) ⇒ number

+
+
+
+
Description
+
+

Construct and returns a time +value. If any of the units are greater or less than their normal +range, the overflow/underflow will be added/subtracted from the next +greater unit.

+
+
Returns
+
+

number - Returns a date/time value representing the fraction +of the day consumed by the given time

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

hours

integer

Zero-based integer value between 0 and 23 +representing the hour of the day.

[minutes]

integer

0

Zero-based integer value representing the minute +segment of a time.

[seconds]

integer

0

Zero-based integer value representing the +seconds segment of a time.

+
+
+
+
+

Example

+
+
+
+
time(12, 0, 0) | [hour(@), minute(@), second(@)] // returns [12, 0, 0]
+
+
+
+
+

9.3.82. toArray

+
+

toArray(arg) ⇒ array

+
+
+
+
Description
+
+

Converts the provided argument to an array. The conversion +happens as per the following rules:

+
+
    +
  • +

    array - Returns the provided value.

    +
  • +
  • +

    number/string/object/boolean/null - Returns a one element array +containing the argument.

    +
  • +
+
+
+
Returns
+
+

array - The resulting array

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

arg

any

parameter to turn into an array

+
+
+
+
+

Example

+
+
+
+
toArray(1) // returns [1]
+toArray(null()) // returns [`null`]
+
+
+
+
+

9.3.83. toDate

+
+

toDate(ISOString) ⇒ number

+
+
+
+
Description
+
+

Converts the provided string to a date/time value.

+
+
Returns
+
+

number - The resulting date/time +number. If conversion fails, return null.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

ISOString

string

An +ISO8601 formatted +string. (limited to the RFC +3339 profile) If the string does not include a timezone offset (or +trailing `Z'), it will be assumed to be local time

+
+
+
+
+

Example

+
+
+
+
toDate("20231110T130000+04:00") // returns 19671.375
+toDate("2023-11-10T13:00:00+04:00") // returns 19671.375
+toDate("20231110") | year(@) & "/" & month(@) // returns "2023/11"
+
+
+
+
+

9.3.84. today

+
+

today() ⇒ number

+
+
+
+
Description
+
+

Returns a date/time value +representing the start of the current day. i.e. midnight

+
+
Returns
+
+

number - today at midnight

+
+
+
+
+
+

9.3.85. toNumber

+
+

toNumber(value, [base]) ⇒ number

+
+
+
+
Description
+
+

Converts the provided arg to a number. The conversions +follow the type coercion rules but will also: * +Convert non-numeric strings to zero * Convert arrays to arrays of +numbers

+
+
Returns
+
+

number - The resulting number. If conversion to number fails, +return null.

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

value

any | Array.<any>

to convert to number

[base]

integer | Array.<integer>

10

If the input arg is a +string, the base to use to convert to number. One of: 2, 8, 10, 16. +Defaults to 10.

+
+
+
+
+

Example

+
+
+
+
toNumber(1) // returns 1
+toNumber("10") // returns 10
+toNumber({a: 1}) // returns null
+toNumber(true()) // returns 1
+toNumber("10f") // returns null
+toNumber("FF", 16) // returns 255
+
+
+
+
+

9.3.86. toString

+
+

toString(arg, [indent]) ⇒ string

+
+
+
+
Description
+
+

Returns the argument converted to a string. If the +argument is a string, it will be returned unchanged. Otherwise, returns +the JSON encoded value of the argument.

+
+
Returns
+
+

string - The result string.

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

arg

any

Value to be converted to a string

[indent]

integer

0

Indentation to use when converting objects and +arrays to a JSON string

+
+
+
+
+

Example

+
+
+
+
toString(1) // returns "1"
+toString(true()) // returns "true"
+toString({sum: 12 + 13}) // "{"sum":25}"
+toString("hello") // returns "hello"
+
+
+
+
+

9.3.87. trim

+
+

trim(text) ⇒ string | Array.<string>

+
+
+
+
Description
+
+

Remove leading and trailing spaces (U+0020), and replace +all internal multiple spaces with a single space. Note that other +whitespace characters are left intact.

+
+
Returns
+
+

string | Array.<string> - trimmed string

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

text

string | Array.<string>

string to trim

+
+
+
+
+

Example

+
+
+
+
trim("   ab    c   ") // returns "ab c"
+
+
+
+
+

9.3.88. true

+
+

true() ⇒ boolean

+
+
+
+
Description
+
+

Return constant boolean true value. Expressions may also +use the JSON literal: `true`

+
+
Returns
+
+

boolean - True

+
+
+
+
+
+

9.3.89. trunc

+
+

trunc(numA, [numB]) ⇒ number | Array.<number>

+
+
+
+
Description
+
+

Truncates a number to an integer by removing the +fractional part of the number. i.e. it rounds towards zero.

+
+
Returns
+
+

number | Array.<number> - Truncated value

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

numA

number | Array.<number>

number to truncate

[numB]

integer | Array.<integer>

0

A number specifying the +number of decimal digits to preserve.

+
+
+
+
+

Example

+
+
+
+
trunc(8.9) // returns 8
+trunc(-8.9) // returns -8
+trunc(8.912, 2) // returns 8.91
+
+
+
+
+

9.3.90. type

+
+

type(subject) ⇒ string

+
+
+
+
Description
+
+

Finds the type name of the given subject argument as a +string value. The return value will be one of the following:

+
+
    +
  • +

    number

    +
  • +
  • +

    string

    +
  • +
  • +

    boolean

    +
  • +
  • +

    array

    +
  • +
  • +

    object

    +
  • +
  • +

    null

    +
  • +
+
+
+
Returns
+
+

string - The type name

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

subject

any

type to evaluate

+
+
+
+
+

Example

+
+
+
+
type(1) // returns "number"
+type("") // returns "string"
+
+
+
+
+

9.3.91. unique

+
+

unique(input) ⇒ array

+
+
+
+
Description
+
+

Find the set of unique elements within an array

+
+
Returns
+
+

array - array with duplicate elements removed

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

input

array

input array

+
+
+
+
+

Example

+
+
+
+
unique([1, 2, 3, 4, 1, 1, 2]) // returns [1, 2, 3, 4]
+
+
+
+
+

9.3.92. upper

+
+

upper(input) ⇒ string | Array.<string>

+
+
+
+
Description
+
+

Converts all the alphabetic code points in a string to +uppercase.

+
+
Returns
+
+

string | Array.<string> - the upper case value of the +input string

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

input

string | Array.<string>

input string

+
+
+
+
+

Example

+
+
+
+
upper("abcd") // returns "ABCD"
+
+
+
+
+

9.3.93. value

+
+

value(subject, index) ⇒ any

+
+
+
+
Description
+
+

Perform an indexed lookup on an object or array

+
+
Returns
+
+

any - the result of the lookup – or null if not found.

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ParamTypeDescription

subject

object | array | null

on which to perform the +lookup. When querying for hidden properties, +subject may be any data type.

index

string | integer

if subject is an object, index must +be a string indicating the key name to search for. If subject is an +array, then index must be an integer indicating the offset into the +array

+
+
+
+
+

Example

+
+
+
+
value({a: 1, b:2, c:3}, "a") // returns 1
+value([1, 2, 3, 4], 2) // returns 3
+
+
+
+
+

9.3.94. values

+
+

values(obj) ⇒ array

+
+
+
+
Description
+
+

Generates an array of the values of the provided object. +Note that because JSON objects are inherently unordered, the values +associated with the provided object are also unordered.

+
+
Returns
+
+

array - array of the values

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

obj

object

source object

+
+
+
+
+

Example

+
+
+
+
values({a : 3, b : 4}) // returns [3, 4]
+
+
+
+
+

9.3.95. weekday

+
+

weekday(date, [returnType]) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Extract the day of the week from a date. The specific +numbering of the day of week is controlled by the returnType +parameter:

+
+
    +
  • +

    1 : Sunday (1), Monday (2), …, Saturday (7)

    +
  • +
  • +

    2 : Monday (1), Tuesday (2), …, Sunday(7)

    +
  • +
  • +

    3 : Monday (0), Tuesday (1), …., Sunday(6)

    +
  • +
+
+
+
Returns
+
+

integer | Array.<integer> - day of the week

+
+
Parameters
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
ParamTypeDefaultDescription

date

number | Array.<number>

date/time value for which the day of the week is to be returned. +Date/time values can be generated using the datetime, +toDate, today, now and +time functions.

[returnType]

integer | Array.<integer>

1

Determines the +representation of the result. An unrecognized returnType will result in +a error.

+
+
+
+
+

Example

+
+
+
+
weekday(datetime(2006,5,21)) // 1
+weekday(datetime(2006,5,21), 2) // 7
+weekday(datetime(2006,5,21), 3) // 6
+
+
+
+
+

9.3.96. year

+
+

year(date) ⇒ integer | Array.<integer>

+
+
+
+
Description
+
+

Finds the year of a datetime value

+
+
Returns
+
+

integer | Array.<integer> - The year value

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

date

number | Array.<number>

input date/time value Date/time values can be generated using the +datetime, toDate, today, +now and time functions.

+
+
+
+
+

Example

+
+
+
+
year(datetime(2008,5,23)) // returns 2008
+
+
+
+
+

9.3.97. zip

+
+

zip(…arrays) ⇒ array

+
+
+
+
Description
+
+

Generates a convolved (zipped) array containing grouped +arrays of values from the array arguments from index 0, 1, 2, etc. This +function accepts a variable number of arguments. The length of the +returned array is equal to the length of the shortest array.

+
+
Returns
+
+

array - An array of arrays with elements zipped together

+
+
Parameters
+
+ +++++ + + + + + + + + + + + + + + +
ParamTypeDescription

…arrays

array

array of arrays to zip together

+
+
+
+
+

Example

+
+
+
+
zip([1, 2, 3], [4, 5, 6, 7]) // returns [[1, 4], [2, 5], [3, 6]]
+
+
+
+
+
+
+
+

10. Integrations

+
+
+

The json-formula API allows integrations to customize various json-formula behaviors.

+
+
+

10.1. Globals

+
+

By default, json-formula has one global symbol: @. A host may inject additional global identifiers. These identifiers must be prefixed with the dollar ($) symbol.

+
+

Examples

+
+

Given: a global symbol:

+
+
+
+
  {
+    "$days": [
+       "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
+    ]
+  }
+
+
+
+
+
    eval(value($days, weekday(datetime(date.year, date.month, date.day), 3)),
+    {
+      "date": {
+        "year": 2023,
+        "month": 9,
+        "day": 13
+      }
+    }) -> "Wednesday"
+
+
+
+
+

10.2. Specify locale

+
+

The default locale for json-formula is en-US. A host may specify an alternate locale. The locale setting affects only the behavior of the casefold() function.

+
+
+
+

10.3. Custom toNumber

+
+

In various contexts, json-formula converts values to numbers. +A host may provide its own toNumber() function that json-formula will use in place of the default functionality. For example, a custom toNumber() could make use of locale-specific date formats to attempt to convert a string to a date value, or could allow currency values e.g., "$123.45" to be converted to number.

+
+
+
+

10.4. Additional Functions

+
+

A host may provide its own set of functions to augment the base set provided by json-formula.

+
+
+
+

10.5. Hidden Properties

+
+

A host system may construct its source JSON data with complex properties that have nested structure that can be found through explicit navigation, but will not be found through normal tree searching. Here is an example of how this can be configured in JavaScript:

+
+
+
+
function createField(id, value) {
+  class Field {
+    valueOf() { return value; }
+
+    toString() { return value.toString(); }
+
+    toJSON() { return value; }
+  }
+  const f = new Field();
+  Object.defineProperty(f, '$id', { get: () -> id });
+  Object.defineProperty(f, '$value', { get: () -> value });
+
+  return f;
+}
+
+const json = {
+  "street": createField("abc123", "Maple Street"),
+  "city": createField("def456", "New York")
+}
+
+Given this configuration, these search results are possible:
+
+street -> "Maple Street"
+street.$value -> "Maple Street"
+street.$id -> "abc123"
+type(street) -> "string"
+keys(street) -> []
+
+
+
+
+

10.6. Tracking

+
+

A host system may want to track which properties are accessed during the evaluation of an expression. This can be done by providing a track function on the object being evaluated. The track function will be called with the object being evaluated and the key being accessed. Here is an example of how this can be configured in JavaScript:

+
+
+
+
properties[Symbol.for('track')] = (obj, key) => trackDependent(obj, key);
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/doc/output/json-formula-specification-2.0.0-beta.1.pdf b/doc/output/json-formula-specification-2.0.0-beta.1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a0294ebd4acc8515fcea41e6952ee46d40496674 GIT binary patch literal 1382950 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

XiYC-^2!{}l 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

vH~5Y*EZMo=LN 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, `>=`, `<`, `\<=`) must be a string or number. Any other type shall be coerced to a number. * If the operands of an ordering comparison are different, they shall both be coerced to a number * Parameters to functions shall be coerced when there is a single viable coercion available. For example, if a null value is provided to a function that accepts a number or string, then coercion shall not happen, since a null value can be coerced to both types. Conversely if a string is provided to a function that accepts a number or array of numbers, then the string shall be coerced to a number, since there is no supported coercion to convert it to an array of numbers. -* When functions accept a typed array, the function rules determine whether coercion may occur. Some functions (e.g. `avg()`) ignore array members of the wrong type. Other functions (e.g. `abs()`) coerce array members. If coercion may occur, then any provided array will have each of its members coerced to the expected type. e.g., if the input array is `[2,3,"6"]` and an array of numbers is expected, the array will be coerced to `[2,3,6]`. The equality and inequality operators (`=`, `==`, `!=`, `<>`) do **not** perform type coercion. If operands are different types, the values are considered not equal. @@ -94,7 +93,7 @@ In all cases except ordering comparison, if the coercion is not possible, a `Typ eval([1,2,3] ~ 4, {}) -> [1,2,3,4] eval(123 < "124", {}) -> true eval("23" > 111, {}) -> false - eval(avg(["2", "3", "4"]), {}) -> 3 + eval(avgA(["2", "3", "4"]), {}) -> 3 eval(1 == "1", {}) -> false ---- @@ -130,7 +129,7 @@ In all cases except ordering comparison, if the coercion is not possible, a `Typ | null | boolean | false |=== -An array may be coerced to another type of array as long as there is a supported coercion for the array content. For examples, just as a string can be coerced to a number, an array of strings may be coerced to an array of numbers. +An array may be coerced to another type of array as long as there is a supported coercion for the array content. For example, just as a string can be coerced to a number, an array of strings may be coerced to an array of numbers. Note that while strings, numbers and booleans may be coerced to arrays, they may not be coerced to a different type within that array. For example, a number cannot be coerced to an array of strings -- even though a number can be coerced to a string, and a string can be coerced to an array of strings. @@ -142,7 +141,7 @@ Note that while strings, numbers and booleans may be coerced to arrays, they may eval("\"$123.00\" + 1", {}) -> TypeError eval("truth is " & `true`, {}) -> "truth is true" eval(2 + `true`, {}) -> 3 - eval(avg(["20", "30"]), {}) -> 25 + eval(minA(["20", "30"]), {}) -> 20 ---- === Date and Time Values @@ -1204,8 +1203,7 @@ output. === Function parameters -Functions support the set of standard json-formula <>. If the resolved arguments cannot be coerced to -match the types specified in the signature, a `TypeError` error occurs. +Functions support the set of standard json-formula <>. If the parameters cannot be coerced to match the types specified in the signature, a `TypeError` error occurs. As a shorthand, the type `any` is used to indicate that the function argument can be any of (`array|object|number|string|boolean|null`). @@ -1229,14 +1227,12 @@ does not exist, a `FunctionError` error is raised. Many functions that process scalar values also allow for the processing of arrays of values. For example, the `round()` function may be called to process a single value: `round(1.2345, 2)` or to process an array of values: `round([1.2345, 2.3456], 2)`. The first call will return a single value, the second call will return an array of values. When processing arrays of values, and where there is more than one parameter, each parameter is converted to an array so that the function processes each value in the set of arrays. From our example above, the call to `round([1.2345, 2.3456], 2)` would be processed as if it were `round([1.2345, 2.3456], [2, 2])`, and the result would be the same as: `[round(1.2345, 2), round(2.3456, 2)]`. -Functions that accept array parameters will also accept nested arrays. With nested arrays, aggregating functions (min(), max(), avg(), sum() etc.) will flatten the arrays. e.g. - -`avg([2.1, 3.1, [4.1, 5.1]])` will be processed as `avg([2.1, 3.1, 4.1, 5.1])` and return `3.6`. +Functions that accept array parameters will also accept nested arrays. Aggregating functions (`min()`, `max()`, `avg()`, `sum()`, etc.) will flatten nested arrays. e.g. `avg([2.1, 3.1, [4.1, 5.1]])` will be processed as `avg([2.1, 3.1, 4.1, 5.1])` and return `3.6`. Non-aggregating functions will return the same array hierarchy. e.g. -`upper("a", ["b"]]) => ["A", ["B"]]` -`round([2.12, 3.12, [4.12, 5.12]], 1)` will be processed as `round([2.12, 3.12, [4.12, 5.12]], [1, 1, [1, 1]])` and return `[2.1, 3.1, [4.1, 5.1]] ` +`upper(["a", ["b"]]) => ["A", ["B"]]` +`round([2.12, 3.12, [4.12, 5.12]], 1)` will be processed as `round([2.12, 3.12, [4.12, 5.12]], [1, 1, [1, 1]])` and return `[2.1, 3.1, [4.1, 5.1]]` These array balancing rules apply when any parameter is an array: @@ -1246,6 +1242,7 @@ These array balancing rules apply when any parameter is an array: * The function will return an array which is the result of iterating over the elements of the arrays and applying the function logic on the values at the same index. With nested arrays: + * Nested arrays will be flattened for aggregating functions * Non-aggregating functions will preserve the array hierarchy and will apply the balancing rules to each element of the nested arrays diff --git a/package.json b/package.json index 3e83407a..01bd4dd7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/json-formula", - "version": "1.1.2", + "version": "2.0.0-beta.1", "description": "json-formula Grammar and implementation", "main": "src/json-formula.js", "type": "module", diff --git a/src/functions.js b/src/functions.js index 8d4ae7a1..7de0a440 100644 --- a/src/functions.js +++ b/src/functions.js @@ -440,10 +440,10 @@ export default function functions( /** * Finds the average of the elements in an array. - * Non-numeric values (text, boolean, null etc) are ignored. + * Non-numeric values (text, boolean, null, object) are ignored. * If there are nested arrays, they are flattened. * If the array is empty, an evaluation error is thrown - * @param {number[]} elements array of numeric values + * @param {any[]} elements array of values * @return {number} average value * @function avg * @example @@ -467,7 +467,7 @@ export default function functions( /** * Finds the average of the elements in an array, converting strings and booleans to number. - * If any conversions to number fail, an type error is thrown. + * If any conversions to number fail, a type error is thrown. * If there are nested arrays, they are flattened. * If the array is empty, an evaluation error is thrown * @param {number[]} elements array of numeric values @@ -1200,7 +1200,7 @@ export default function functions( * @returns {string|string[]} the lower case value of the input string * @function lower * @example - * lower("E. E. Cummings") // returns e. e. cummings + * lower("E. E. Cummings") // returns "e. e. cummings" */ lower: { _func: args => evaluate(args, a => toString(a).toLowerCase()), @@ -1230,10 +1230,10 @@ export default function functions( /** * Calculates the largest value in the input numbers. - * Any values that are not numbers (e.g. null, boolean, strings, objects) will be ignored. + * Any values that are not numbers (null, boolean, strings, objects) will be ignored. * If any parameters are arrays, the arrays will be flattened. * If no numbers are provided, the function will return zero. - * @param {...(number[]|number)} collection values/array(s) in which the maximum + * @param {...(array|any)} collection values/array(s) in which the maximum * element is to be calculated * @return {number} the largest value found * @function max @@ -1263,7 +1263,7 @@ export default function functions( * Calculates the largest value in the input values, coercing parameters to numbers. * Null values are ignored. * If any parameters cannot be converted to a number, - * the function will fail with an type error. + * the function will fail with a type error. * If any parameters are arrays, the arrays will be flattened. * If no numbers are provided, the function will return zero. * @param {...(any)} collection values/array(s) in which the maximum @@ -1379,10 +1379,10 @@ export default function functions( /** * Calculates the smallest value in the input numbers. - * Any values that are not numbers (e.g. null, boolean, strings, objects) will be ignored. + * Any values that are not numbers (null, boolean, string, object) will be ignored. * If any parameters are arrays, the arrays will be flattened. * If no numbers are provided, the function will return zero. - * @param {...(number[]|number)} collection + * @param {...(any[]|any)} collection * Values/arrays to search for the minimum value * @return {number} the smallest value found * @function min @@ -1410,10 +1410,10 @@ export default function functions( * Calculates the smallest value in the input values, coercing parameters to numbers. * Null values are ignored. * If any parameters cannot be converted to a number, - * the function will fail with an type error. + * the function will fail with a type error. * If any parameters are arrays, the arrays will be flattened. * If no numbers are provided, the function will return zero. - * @param {...(any)} collection values/array(s) in which the maximum + * @param {...(any[]|any)} collection values/array(s) in which the maximum * element is to be calculated * @return {number} the largest value found * @function minA @@ -2148,13 +2148,13 @@ export default function functions( }, /** - * Find the square root of a number - * @param {number|number[]} num source number - * @return {number|number[]} The calculated square root value - * @function sqrt - * @example - * sqrt(4) // returns 2 - */ + * Find the square root of a number + * @param {number|number[]} num source number + * @return {number|number[]} The calculated square root value + * @function sqrt + * @example + * sqrt(4) // returns 2 + */ sqrt: { _func: args => evaluate(args, arg => validNumber(Math.sqrt(arg), 'sqrt')), _signature: [ @@ -2185,7 +2185,7 @@ export default function functions( * then compute the standard deviation using [stdevp]{@link stdevp}. * Non-numeric values (text, boolean, null etc) are ignored. * If there are nested arrays, they are flattened. - * @param {number[]} numbers The array of numbers comprising the population. + * @param {any[]} values The array containing numbers comprising the population. * Array size must be greater than 1. * @returns {number} [Standard deviation](https://en.wikipedia.org/wiki/Standard_deviation) * @function stdev @@ -2252,7 +2252,9 @@ export default function functions( * `stdevp` assumes that its arguments are the entire population. * If your data represents a sample of the population, * then compute the standard deviation using [stdev]{@link stdev}. - * @param {number[]} numbers The array of numbers comprising the population. + * Non-numeric values (text, boolean, null etc) are ignored. + * If there are nested arrays, they are flattened. + * @param {any[]} values The array containing numbers comprising the population. * An empty array is not allowed. * @returns {number} Calculated standard deviation * @function stdevp @@ -2359,7 +2361,9 @@ export default function functions( /** * Calculates the sum of the provided array. * An empty array will produce a return value of 0. - * @param {number[]} collection array of numbers + * Any values that are not numbers (null, boolean, strings, objects) will be ignored. + * If any parameters are arrays, the arrays will be flattened. + * @param {any[]} collection array of values * @return {number} The computed sum * @function sum * @example @@ -2368,13 +2372,18 @@ export default function functions( sum: { _func: resolvedArgs => { let sum = 0; - resolvedArgs[0].flat(Infinity).forEach(arg => { - sum += arg * 1; - }); + resolvedArgs[0] + .flat(Infinity) + .filter(a => getType(a) === TYPE_NUMBER) + .forEach(arg => { + sum += arg * 1; + }); + return sum; }, - _signature: [{ types: [TYPE_ARRAY_NUMBER] }], + _signature: [{ types: [TYPE_ARRAY] }], }, + /** * Computes the tangent of a number in radians * @param {number|number[]} angle A number representing an angle in radians. @@ -2517,11 +2526,14 @@ export default function functions( }, /** - * Converts the provided arg to a number as per - * the <<_type_coercion_rules,type coercion rules>>. + * Converts the provided arg to a number. + * The conversions follow the <<_type_coercion_rules,type coercion rules>> but will also: + * * Convert non-numeric strings to zero + * * Convert arrays to arrays of numbers * - * @param {any} arg to convert to number - * @param {integer} [base=10] If the input `arg` is a string, the use base to convert to number. + * @param {any|any[]} value to convert to number + * @param {integer|integer[]} [base=10] If the input `arg` is a string, + * the base to use to convert to number. * One of: 2, 8, 10, 16. Defaults to 10. * @return {number} The resulting number. If conversion to number fails, return null. * @function toNumber @@ -2535,49 +2547,57 @@ export default function functions( */ toNumber: { _func: resolvedArgs => { - const num = valueOf(resolvedArgs[0]); - const base = resolvedArgs.length > 1 ? toInteger(resolvedArgs[1]) : 10; - if (getType(num) === TYPE_STRING && base !== 10) { - let digitCheck; - if (base === 2) digitCheck = /^\s*(\+|-)?[01.]+\s*$/; - else if (base === 8) digitCheck = /^\s*(\+|-)?[0-7.]+\s*$/; - else if (base === 16) digitCheck = /^\s*(\+|-)?[0-9A-Fa-f.]+\s*$/; - else throw evaluationError(`Invalid base: "${base}" for toNumber()`); - - if (num === '') return 0; - if (!digitCheck.test(num)) { - debug.push(`Failed to convert "${num}" base "${base}" to number`); - return null; - } - const parts = num.split('.').map(p => p.trim()); + const toNumberFn = (value, base) => { + const num = valueOf(value); + if (getType(num) === TYPE_STRING && base !== 10) { + let digitCheck; + if (base === 2) digitCheck = /^\s*(\+|-)?[01.]+\s*$/; + else if (base === 8) digitCheck = /^\s*(\+|-)?[0-7.]+\s*$/; + else if (base === 16) digitCheck = /^\s*(\+|-)?[0-9A-Fa-f.]+\s*$/; + else throw evaluationError(`Invalid base: "${base}" for toNumber()`); + + if (num === '') return 0; + if (!digitCheck.test(num)) { + debug.push(`Failed to convert "${num}" base "${base}" to number`); + return null; + } + const parts = num.split('.').map(p => p.trim()); - let decimal = 0; - if (parts.length > 1) { - decimal = parseInt(parts[1], base) * base ** -parts[1].length; - } + let decimal = 0; + if (parts.length > 1) { + decimal = parseInt(parts[1], base) * base ** -parts[1].length; + } - const result = parseInt(parts[0], base) + decimal; - if (parts.length > 2 || Number.isNaN(result)) { - debug.push(`Failed to convert "${num}" base "${base}" to number`); + const result = parseInt(parts[0], base) + decimal; + if (parts.length > 2 || Number.isNaN(result)) { + debug.push(`Failed to convert "${num}" base "${base}" to number`); + return null; + } + return result; + } + try { + return toNumber(num); + } catch (e) { + const errorString = arg => { + const v = toJSON(arg); + return v.length > 50 ? `${v.substring(0, 20)} ...` : v; + }; + + debug.push(`Failed to convert "${errorString(num)}" to number`); return null; } - return result; - } - try { - return toNumber(num); - } catch (e) { - const errorString = arg => { - const v = toJSON(arg); - return v.length > 50 ? `${v.substring(0, 20)} ...` : v; - }; - - debug.push(`Failed to convert "${errorString(num)}" to number`); - return null; + }; + let base = 10; + if (resolvedArgs.length > 1) { + base = Array.isArray(resolvedArgs[1]) + ? resolvedArgs.map(toInteger) + : toInteger(resolvedArgs[1]); } + return evaluate([resolvedArgs[0], base], toNumberFn); }, _signature: [ { types: [TYPE_ANY] }, - { types: [TYPE_NUMBER], optional: true }, + { types: [TYPE_NUMBER, TYPE_ARRAY_NUMBER], optional: true }, ], }, diff --git a/test/functions.json b/test/functions.json index 92f98040..cb3e9582 100644 --- a/test/functions.json +++ b/test/functions.json @@ -897,7 +897,19 @@ }, { "expression": "sum(array)", - "error": "TypeError" + "result": 11 + }, + { + "expression": "sum(toNumber(array))", + "result": 111 + }, + { + "expression": "toNumber(array, 16)", + "result": [-1, 3, 4, 5, 10, 256] + }, + { + "expression": "sum(toNumber(array, 16))", + "result": 277 }, { "expression": "sum(array[].toNumber(@))", @@ -1037,7 +1049,7 @@ }, { "expression": "toNumber(`[0]`)", - "result": null + "result": [0] }, { "expression": "toNumber(`{\"foo\": 0}`)", diff --git a/test/specSamples.json b/test/specSamples.json index 134cb646..2b047fca 100644 --- a/test/specSamples.json +++ b/test/specSamples.json @@ -12,7 +12,7 @@ { "expression": "[1,2,3] ~ 4", "result": [1, 2, 3, 4] }, { "expression": "123 < \"124\"", "result": true }, { "expression": "\"23\" > 111", "result": false }, - { "expression": "avg([\"2\", \"3\", \"4\"])", "error": "EvaluationError" }, + { "expression": "avgA([\"2\", \"3\", \"4\"])", "result": 3 }, { "expression": "1 == \"1\"", "result": false }, { "expression": "\"$123.00\" + 1", "error": "TypeError" }, { @@ -65,7 +65,7 @@ "result": { "month": 1, "day": 21, "hour": 12 } }, { "expression": "2 + `true`", "result": 3 }, - { "expression": "avg([\"20\", \"30\"])", "error": "EvaluationError" }, + { "expression": "minA([\"20\", \"30\"])", "result": 20 }, { "expression": "left + right", "data": { "left": 8, "right": 12 }, @@ -530,7 +530,9 @@ { "expression": "false() || if()", "error": "FunctionError" }, { "expression": "true() || if()", "result": true }, { "expression": "true() && if()", "error": "FunctionError" }, - { "expression": "false() && if()", "result": false } + { "expression": "false() && if()", "result": false }, + { "expression": "upper([\"a\", [\"b\"]])", "result": ["A", ["B"]] }, + { "expression": "round([2.12, 3.12, [4.12, 5.12]], 1)", "result": [2.1, 3.1, [4.1, 5.1]] } ] } ] diff --git a/test/tests.json b/test/tests.json index 7ac178e4..041c7a65 100644 --- a/test/tests.json +++ b/test/tests.json @@ -143,7 +143,7 @@ "result": 10.48 }, { "expression": "sum(`[2,4,6]`)", "result": 12 }, - { "expression": "sum([2,\"4\",6,`true`])", "result": 13 }, + { "expression": "sum([2,\"4\",6,`true`])", "result": 8 }, { "expression": "(3 + 2) * 10 / 2 - 5", "result": 20 }, { "expression": "2 * \"$2\" + `null`", "error": "TypeError" }, { "expression": "\"0x11\" * 1", "error": "TypeError"},