Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JEP-14 Compact syntax for multi-select-hash #1

Closed
wants to merge 1 commit into from

Conversation

springcomp
Copy link
Contributor

Compact syntax for multi-select-hash

JEP 14
Author Dan Vanderkam, Maxime Labelle
Status draft
Created 26-Feb-2022

Abstract

This JEP proposes a grammar modification to support
ES6-style
compact multi-select-hash constructs.

Motivation

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:

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}.

This JEP supports this syntax to make JMESPath usage slightly less verbose.

Specification

What is currently the multi-select-hash production will be renamed
to 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 = "{" ( 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 ) ) "}"

Motivating Example

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"}].

Rationale

This JEP is inspired by an idea
from Dan Vanderkam.

@springcomp springcomp deleted the branch master February 27, 2022 08:24
@springcomp springcomp closed this Feb 27, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant