Similar to an Array field, a Map field may actually consist of several different
values. RecordPath gives us the ability to select a set of values based on their keys. We
do this by using a quoted String within square brackets. As an example, let's
re-visit our original Record from above:

Now, though, let's consider that the Schema that is associated with the Record
indicates that the address field is not a Record but rather a
Map field. In this case, if we attempt to reference the
zip using the RecordPath /details/address/zip the
RecordPath will not match because the address field is not a Record and
therefore does not have any Child Record named zip. Instead, it is a
Map field with keys and values of type String. Unfortunately, when looking at JSON this
may seem a bit confusing because JSON does not truly have a Type system. When we convert
the JSON into a Record object in order to operate on the data, though, this distinction
can be important.

In the case laid out above, we can still access the zip field using
RecordPath. We must now use the a slightly different syntax, though:
/details/address['zip']. This is telling the RecordPath
that we want to access the details field at the highest level. We then
want to access its address field. Since the address
field is a Map field we can use square brackets to indicate that we
want to specify a Map Key, and we can then specify the key in quotes.

Further, we can select more than one Map Key, using a comma-separated list:
/details/address['city', 'state',
'zip']. We can also select all of the fields, if we want, using the
Wildcard operator ():
/details/address[]. Map fields do not contain any sort of
ordering, so it is not possible to reference the keys by numeric indices.