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);
}
}