Pair Producer {{: …}}

The pair producer {{: expression_selecting_keys }} creates key-value pairs. It should only be used in a context where key-value pairs are allowed (i.e. in a JSON object context).

The expression following the colon (':') is evaluated and the result is used as a list of keys. All key-value pairs in the current context with a matching key in this list of keys are copied to the output.

Note: With markup input, you can only select element or attribute nodes, because other node types don't have a name (see "Example: XML input").

The pair producer also creates commas between and after its pairs. Therefore you should avoid placing an explicit comma behind a pair producer. If an expression does not match anything, no output would be produced. In that case, your literal comma could be illegal.

Example: explicit keys

Input:

{
  "foo": 1,
  "bar": [{"key":"value"}],
  "baz": 3
}

Template:

{
  {{: foo | bar }}
}

Output:

{
  "foo": 1,
  "bar": [{"key":"value"}]
}

Example: filter

Input:

{
  "foo": 1,
  "bar": 2,
  "ba z": {"key":"value"}
}

Template:

{
  {{: *[not(name() = 'bar')] }}
}

Output:

{
  "foo": 1,
  "ba z": {"key":"value"}
}

Example: automatic comma

Input:

{
  "foo": 1,
  "bar": 2,
  "baz": 3
}

Template:

{
  {{: * }}
  "add": "this"
}

Output:

{
  "foo": 1,
  "bar": 2,
  "baz": 3,
  "add": "this"
}

Example: XML input

Input:

<root foo="1">
  <bar>2</bar>
  <baz>3</baz>
  <!-- a comment -->
</foo>

Template:

{
  {{: @foo | //bar | //baz/text() | //comment() }}
}

Output:

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

Last updated