属性值有特殊符号导致fastjson反序列化失败处理

做Java项目有一段时间了,感觉跟.net差别不是太大,遇到个小问题记录一下

1,遇到的问题是,反序列化时候对象属性值带有 & 或者 ‘(单引号)都会导致反序列化失败,并不是Json数据格式的问题

2,解决办法是采用了。这个属性对应的值进行转码处理,试过(uft8,asc)等都不行,后面采用了转 Ascii 码后处理成功

方法如下,注意空值处理

/**
 * 字符串转换为Ascii
 * @param value
 * @return
 */
public static String stringToAscii(String value)
{
    StringBuffer sbu = new StringBuffer();
    char[] chars = value.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        if(i != chars.length - 1)
        {
            sbu.append((int)chars[i]).append(",");
        }
        else {
            sbu.append((int)chars[i]);
        }
    }
    return sbu.toString();
}

/**
 * Ascii转换为字符串
 * @param value
 * @return
 */
public static String asciiToString(String value)
{
    StringBuffer sbu = new StringBuffer();
    String[] chars = value.split(",");
    for (int i = 0; i < chars.length; i++) {
        sbu.append((char) Integer.parseInt(chars[i]));
    }
    return sbu.toString();
}
### 如何正确地对 JSON 数据进行转义处理 JSON 是一种轻量级的数据交换格式,在传输过程中可能会遇到特殊字符需要被转义的情况。以下是关于如何正确对 JSON 数据进行转义处理的相关说明。 #### 使用编程语言内置库实现自动转义 大多数现代编程语言都提供了专门用于处理 JSON 的标准库或第三方库,这些工具能够自动完成必要的转义操作。例如: - **Python**: 可以通过 `json` 模块中的方法来序列化和反序列化 JSON 数据[^3]。 当使用 `json.dumps()` 方法将 Python 字典转换为 JSON 字符串时,该函数会自动处理所有的必要转义。 ```python import json data = {"message": 'I said, "Hello, World!"'} json_str = json.dumps(data) print(json_str) # 输出: {"message": "I said, \"Hello, World!\""} ``` - **Java**: 利用 Fastjson 或 Jackson 这样的流行库可以简化 JSON 处理过程并确保安全性[^4]。 如果需要手动替换某些特定的控制字符(如换行符 `\n`, 回车符 `\r`),则可以在预处理阶段执行正则表达式替代逻辑后再交给 JSON 序列化器处理。 ```java String rawInput = "{\"key\":\"value\\nwith newline\"}"; String sanitizedJson = rawInput.replaceAll("\\\\n|\\\\r", ""); // 去除不希望存在的换行符 JSONObject jsonObject = new JSONObject(sanitizedJson); System.out.println(jsonObject.toString()); ``` #### 手动转义场景下的注意事项 尽管推荐尽可能依赖成熟的框架来进行自动化管理,但在少数情况下可能仍需自行实施额外的安全措施。此时应当遵循以下原则: 1. 对双引号 (`"`) 和反斜杠 (`\`) 实施双重编码; 2. 避免直接嵌套未经验证的内容到最终输出中以防注入攻击风险; 3. 根据实际需求决定是否保留其他类型的空白符号或者功能指令码。 对于 JavaScript 来说,有时服务器端传来的参数里已经包含了 HTML 属性值形式的 JSON 表达式,则客户端接收后还需要再次调整其内部结构以便于进一步解析利用[^5]: ```javascript let escapedDiscographyJsonString = php_params.playlist_setup.replace(/"/g,'"'); const parsedData = JSON.parse(escapedDiscographyJsonString); console.log(parsedData); ``` 综上所述,无论是采用何种技术栈开发应用系统,都应该重视起针对敏感输入项的有效防护机制建设工作,从而保障整个交互流程更加稳健可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值