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
}