public Object get() throws IOException {
        final int nextNonBlankspace = nextNonBlankspace();
        switch (nextNonBlankspace) {
            case 0x7B : // { (begin parsing object)
                return parseObject();
            case 0x5B : // [ (begin parsing array)
                return parseArray();
            case 0x22 : // " (begin parsing string)
                return parseString();
            case 0x66 : // f (begin parsing false)
                return parseFalse();
            case 0x74 : // t (begin parsing true)
                return parseTrue();
            case 0x6E : // n (begin parsing null)
                return parseNull();
                
            // Digit '0 - 9'
            case 0x30 : case 0x31 : case 0x32 : case 0x33 : case 0x34 :
            case 0x35 : case 0x36 : case 0x37 : case 0x38 : case 0x39 :
            case 0x2E : // . (decimal sign)
            case 0x2D : // - (minus sign)
                final AtomicReference<Number> number = new AtomicReference<>();
                final CloseMethod closeMethod = parseNumber(number::set);
                if (closeMethod == CloseMethod.NOT_DECIDED) {
                    return number.get();
                }
                throw new JsonSyntaxException(row, col, "parseNumber should return " + CloseMethod.NOT_DECIDED + " but actually returned: " + closeMethod);
            default:
                throw unexpectedCharacterException();
        }
    }
Internal class that parses a stream of JSON characters into an object
representation.
<p>
This implementation includes a line and column counter that makes it easier
to debug an erroneous JSON string. These might add additional overhead to the
parsing time and should therefore only be used if the input is expected to
have errors.

@author Emil Forslund
@since  1.0.0
common-parent/json/src/main/java/com/speedment/common/json/internal/JsonDeserializer.java