private Object parseJsonObject() {
        increaseNestingLevel();
        Map<String, Object> values = new LinkedHashMap<>();
        ws();

        if (peek() == '}') {
            skip();
            decreaseNestingLevel();
            return values;
        }

        while (!eof() && peek() != '`') {
            String key = parseString().value.expectStringValue();
            ws();
            expect(':');
            ws();
            values.put(key, parseJsonValue());
            ws();
            if (expect(',', '}') == ',') {
                ws();
            } else {
                decreaseNestingLevel();
                return values;
            }
        }

        throw syntax("Unclosed JSON object");
    }
Gets a slice of the expression starting from the given 0-based
character position, read all the way through to the current
position of the parser.

@param start Position to slice from, ending at the current position.
@return Returns the slice of the expression from {@code start} to {@link #position}.
smithy-jmespath/src/main/java/software/amazon/smithy/jmespath/Lexer.java