in johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java [77:143]
public JsonValue readValue() {
checkClosed();
if (!parser.hasNext()) {
throw new NothingToRead();
}
final JsonParser.Event next;
if (subStreamReader) {
next = parser.current();
} else {
next = parser.next();
}
switch (next) {
case START_OBJECT:
final JsonObjectBuilder objectBuilder = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, rejectDuplicateKeysMode, provider);
parseObject(objectBuilder);
if (!subStreamReader && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
return objectBuilder.build();
case START_ARRAY:
final JsonArrayBuilder arrayBuilder = new JsonArrayBuilderImpl(emptyList(), bufferProvider, rejectDuplicateKeysMode, provider);
parseArray(arrayBuilder);
if (!subStreamReader && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
return arrayBuilder.build();
case VALUE_STRING:
final JsonStringImpl string = new JsonStringImpl(parser.getString());
if (!subStreamReader && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
return string;
case VALUE_FALSE:
if (!subStreamReader && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
return JsonValue.FALSE;
case VALUE_TRUE:
if (!subStreamReader && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
return JsonValue.TRUE;
case VALUE_NULL:
if (!subStreamReader && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
return JsonValue.NULL;
case VALUE_NUMBER:
final JsonNumber number;
if (parser.isFitLong()) {
number = new JsonLongImpl(parser.getLong());
} else {
number = new JsonNumberImpl(parser.getBigDecimal(), provider::checkBigDecimalScale);
}
if (!subStreamReader && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
return number;
default:
close();
throw new JsonParsingException("Unknown structure: " + next, parser.getLocation());
}
}