private JsonToken nextValue()

in cayenne/src/main/java/org/apache/cayenne/value/json/JsonTokenizer.java [121:180]


    private JsonToken nextValue() {
        if(position >= data.length) {
            throw new MalformedJsonException("Unexpected end of document");
        }

        switch (data[position]) {
            case '{':
                return startObject();
            case '[':
                return startArray();
            case ']':
                return arrayEnd();
            case '}':
                return objectEnd();
            case ':':
                if(states[currentState] != State.OBJECT_MEMBER_DELIMITER) {
                    throw new MalformedJsonException("Unexpected ':' at " + position);
                }
                states[currentState] = State.OBJECT_MEMBER_VALUE;
                position++;
                skipWhitespace();
                return nextValue();
            case ',':
                if(states[currentState] == State.OBJECT_MEMBER_VALUE) {
                    states[currentState] = State.OBJECT_MEMBER_NAME;
                } else if(states[currentState] == State.ARRAY_DELIMITER) {
                    states[currentState] = State.ARRAY_VALUE;
                } else {
                    throw new MalformedJsonException("Unexpected ',' at " + position);
                }
                position++;
                skipWhitespace();
                return nextValue();
            case '\"':
                return stringValue();
            case 'n':
            case 'N':
                return nullValue();
            case 't':
            case 'T':
                return trueValue();
            case 'f':
            case 'F':
                return falseValue();
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case '-':
                return numericValue();
            default:
                throw new MalformedJsonException("Unexpected symbol '" + data[position] + "' at " + position);
        }
    }