JSON解析中遇到特殊字符的处理

在 JSON 解析中,特殊字符指的是需要进行转义处理的字符,例如双引号 (`"`), 反斜杠 (`\`), 斜杠 (`/`), 换行符 (`\n`), 回车 (`\r`), 制表符 (`\t`) 等。这些字符在 JSON 中有特殊的意义,因此需要正确处理以确保 JSON 解析的正确性和安全性。

JSON解析工具类

public class JsonStringUtil {
 
    /**
     * 将字符串中的特殊字符转义
     *
     * @param jsonString 原始字符串
     * @return 转义后的字符串
     */
    public static String escapeJson(String jsonString) {
        if (jsonString == null) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < jsonString.length(); i++) {
            char c = jsonString.charAt(i);
            switch (c) {
            // 对于存储的json结构体来说,"全部处理不适用,单个String可适用
//                case '\"':
//                    sb.append("\\\"");
//                    break;
                case '\\':
                    sb.append("\\\\");
                    break;
                case '/':
                    sb.append("\\/");
                    break;
                case '\b':
                    sb.append("\\b");
                    break;
                case '\f':
                    sb.append("\\f");
                    break;
                case '\n':
                    sb.append("\\n");
                    break;
                case '\r':
                    sb.append("\\r");
                    break;
                case '\t':
                    sb.append("\\t");
                    break;
                default:
                    sb.append(c);
            }
        }
        return sb.toString();
    }
 
    /**
     * 将字符串中的转义字符还原
     *
     * @param jsonString 转义后的字符串
     * @return 还原后的字符串
     */
    public static String unescapeJson(String jsonString) {
        if (jsonString == null) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        boolean isEscape = false;
        for (int i = 0; i < jsonString.length(); i++) {
            char c = jsonString.charAt(i);
            if (isEscape) {
                switch (c) {
                    case '\"':
                    case '\\':
                    case '/':
                    case 'b':
                    case 'f':
                    case 'n':
                    case 'r':
                    case 't':
                        sb.append(unescapeChar(c));
                        break;
                    default:
                        sb.append(c);
                }
                isEscape = false;
            } else {
                if (c == '\\') {
                    isEscape = true;
                } else {
                    sb.append(c);
                }
            }
        }
        return sb.toString();
    }
 
    private static char unescapeChar(char c) {
        switch (c) {
            case '\"':
                return '\"';
            case '\\':
                return '\\';
            case '/':
                return '/';
            case 'b':
                return '\b';
            case 'f':
                return '\f';
            case 'n':
                return '\n';
            case 'r':
                return '\r';
            case 't':
                return '\t';
            default:
                return c;
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值