code: func unquoteString(s string) (string, error) {
  	ret := new(bytes.Buffer)
  	for i := 0; i < len(s); i++ {
  		if s[i] == '\\' {
  			i++
  			if i == len(s) {
  				return "", errors.New("Missing a closing quotation mark in string")
  			}
  			switch s[i] {
  			case '"':
  				ret.WriteByte('"')
  			case 'b':
  				ret.WriteByte('\b')
  			case 'f':
  				ret.WriteByte('\f')
  			case 'n':
  				ret.WriteByte('\n')
  			case 'r':
  				ret.WriteByte('\r')
  			case 't':
  				ret.WriteByte('\t')
  			case '\\':
  				ret.WriteByte('\\')
  			case 'u':
  				if i+4 > len(s) {
  					return "", errors.Errorf("Invalid unicode: %s", s[i+1:])
  				}
  				char, size, err := decodeEscapedUnicode(hack.Slice(s[i+1 : i+5]))
  				if err != nil {
  					return "", errors.Trace(err)
  				}
  				ret.Write(char[0:size])
  				i += 4
  			default:
  				// For all other escape sequences, backslash is ignored.
  				ret.WriteByte(s[i])
  			}
  		} else {
  			ret.WriteByte(s[i])
  		}
  	}
  	return ret.String(), nil
  }
docs: // unquoteString recognizes the escape sequences shown in:
  // https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#json-unquote-character-escape-sequences