private static Object nextValue(String jsonStr, AtomicInteger offset) {

        while (offset.get() < jsonStr.length()) {
            char c = jsonStr.charAt(offset.getAndIncrement());
            if (Character.isWhitespace(c)) {
                continue;
            }
            if (c == '"') {
                offset.decrementAndGet();
                return nextString(jsonStr, offset);
            }
            if (c == '{') {
                offset.decrementAndGet();
                return nextObject(jsonStr, offset);
            }
            if (Character.isDigit(c) || c == '-') {
                offset.decrementAndGet();
                return nextNumber(jsonStr, offset);
            }

            if (c == 't') {
                offset.set(offset.get() + 3);
                return new JsonKeyTFN("true");
            }
            if (c == 'f') {
                offset.set(offset.get() + 4);
                return new JsonKeyTFN("false");
            }
            if (c == 'n') {
                offset.set(offset.get() + 3);
                return new JsonKeyTFN("null");
            }
        }

        return null;
    }