private String parseString() throws IOException {
        final StringBuilder builder = new StringBuilder();

        while (true) {
            switch (next()) {

                // If this is an escape character, add the following character
                // without parsing it.
                case 0x5C: // backslash
                    final int n = next();
                    switch (n) {
                        case 0x22: builder.append('"'); break;  // \"
                        case 0x62: builder.append('\b'); break; // \b
                        case 0x66: builder.append('\f'); break; // \f
                        case 0x6E: builder.append('\n'); break; // \n
                        case 0x72: builder.append('\r'); break; // \r
                        case 0x74: builder.append('\t'); break; // \t
                        case 0x5C: builder.append('\\'); break; // \\
                        default: builder.append('\\').appendCodePoint(n);
                    }
                    continue;

                    // If this terminates the string, break the loop.
                case 0x22: // " (end key)
                    return builder.toString();

                // Every other character should be added to the key.
                default:
                    builder.append(Character.toChars(character));
            }
        }
    }
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