private List<Object> parseEachRemainingEntry(List<Object> list) throws IOException {
        while (true) {
            switch (nextNonBlankspace()) {
                case 0x7B: // { (begin parsing object)
                    list.add(parseObject());
                    break;

                case 0x5B: // [ (begin parsing array)
                    list.add(parseArray());
                    break;

                case 0x22: // " (begin parsing string)
                    list.add(parseString());
                    break;

                case 0x66: // f (begin parsing false)
                    list.add(parseFalse());
                    break;

                case 0x74: // t (begin parsing true)
                    list.add(parseTrue());
                    break;

                case 0x6E: // n (begin parsing null)
                    list.add(parseNull());
                    break;

                // 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 CloseMethod method = parseNumber(list::add);
                    switch (method) {
                        case CONTINUE_IN_PARENT:
                            continue; // nextEntry

                        case EXIT_FROM_PARENT:
                            if (character == 0x5D) { // ]
                                return list;
                            } else {
                                throw unexpectedCharacterException();
                            }

                        case NOT_DECIDED:
                            switch (nextNonBlankspace()) {
                                case 0x2C: // , (continue with next element)
                                    continue; // nextEntry
                                case 0x5D: // ] (close the list)
                                    return list;
                                default:
                                    throw unexpectedCharacterException();
                            }

                        default:
                            throw new IllegalStateException(
                                UNKNOWN_ENUM_CONSTANT + method + "'."
                            );
                    }

                default:
                    throw unexpectedCharacterException();
            }

            switch (nextNonBlankspace()) {
                case 0x2C: // , (continue with next element)
                    continue; // nextEntry
                case 0x5D: // ] (close the list)
                    return list;
                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