Closed springcomp closed 2 years ago
This JEP proposes a grammar modification to support ES6-style compact multi-select-hash constructs.
multi-select-hash
Consider the following JSON document:
{ "values": [ {"id": 1, "first": "Bill", "last": "Gates"}, {"id": 2, "first": "Larry", "last": "Page"} ] }
Let’s say we wanted to return a hash containing ids and first names. This is currently possible using the following syntax:
id
first
values[*].{id:id, first:first}
Since {x:x, y:y} is such a common pattern, ES6 introduced compact object literal notation to simplify this. In ES6, {x,y} is equivalent to {x:x, y:y}.
{x:x, y:y}
{x,y}
This JEP supports this syntax to make JMESPath usage slightly less verbose.
What is currently the multi-select-hash production will be renamed to multi-select-hash-keyval:
multi-select-hash-keyval
multi-select-hash_keval = "{" ( keyval-expr *( "," keyval-expr ) ) "}"
The multi-select-hash production will be modified slightly to accomodate the syntax changes:
multi-select-hash = multi-select-hash-key multi-select-hash =/ multi-select-hash-keyval
The new multi-select-hash-key production is defined like so:
multi-select-hash-key
multi-select-hash-key = "{" ( identifier *( "," identifier ) ) "}"
Here is the full update to the grammar:
multi-select-hash = multi-select-hash-key multi-select-hash =/ multi-select-hash-keyval multi-select-hash-key = "{" ( identifier *( "," identifier ) ) "}" multi-select-hash-keyval = "{" ( keyval-expr *( "," keyval-expr ) ) "}"
With these changes defined, the expression in the “Motivation” section can be be written as:
values[*].{id, first}
Which evaluates to [{"id": 1, "first": "Bill"}, {"id": 2, "first": "Larry"}].
[{"id": 1, "first": "Bill"}, {"id": 2, "first": "Larry"}]
This JEP is inspired by an idea from Dan Vanderkam.
Compact syntax for multi-select-hash
Abstract
This JEP proposes a grammar modification to support ES6-style compact
multi-select-hash
constructs.Motivation
Consider the following JSON document:
Let’s say we wanted to return a hash containing
id
s andfirst
names. This is currently possible using the following syntax:Since
{x:x, y:y}
is such a common pattern, ES6 introduced compact object literal notation to simplify this. In ES6,{x,y}
is equivalent to{x:x, y:y}
.This JEP supports this syntax to make JMESPath usage slightly less verbose.
Specification
What is currently the
multi-select-hash
production will be renamed tomulti-select-hash-keyval
:The
multi-select-hash
production will be modified slightly to accomodate the syntax changes:The new
multi-select-hash-key
production is defined like so:Here is the full update to the grammar:
Motivating Example
With these changes defined, the expression in the “Motivation” section can be be written as:
Which evaluates to
[{"id": 1, "first": "Bill"}, {"id": 2, "first": "Larry"}]
.Rationale
This JEP is inspired by an idea from Dan Vanderkam.