private Object parseJsonValue() {
        ws();
        switch (expect('\"', '{', '[', 't', 'f', 'n', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-')) {
            case 't':
                expect('r');
                expect('u');
                expect('e');
                return true;
            case 'f':
                expect('a');
                expect('l');
                expect('s');
                expect('e');
                return false;
            case 'n':
                expect('u');
                expect('l');
                expect('l');
                return null;
            case '"':
                // Backtrack for positioning.
                position--;
                column--;
                return parseString().value.expectStringValue();
            case '{':
                return parseJsonObject();
            case '[':
                return parseJsonArray();
            default: // - | 0-9
                // Backtrack.
                position--;
                column--;
                return parseNumber().value.expectNumberValue();
        }
    }
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