REST API中GET请求携带JSON格式Body的撇号异常处理
收到的客户端请求Body合法性判断
明确结论:客户端发送的请求Body不属于合法的标准JSON格式,存在多处明确违规的问题:
- 按照RFC 8259定义的JSON行业标准,对象键名、字符串值必须使用双引号作为包裹边界。单引号包裹字符串是JavaScript对象字面量的专属语法,不属于JSON规范认可的合法用法,严格遵循标准的JSON解析器会直接抛出格式错误。
- 你列出的客户端实际发送的Body片段本身还存在结构语法缺陷:数组的闭合方括号缺失、嵌套字符串内部未做有效边界处理(
O'Bryan里的撇号和包裹字符串的单引号是同类型字符,会直接把字符串截断为无效片段)。 - 这类请求平时能正常运行,本质是你侧的服务端解析器做了额外容错适配,比如兼容了单引号写法、自动补全缺失的结构符号。一旦碰到内容和边界符号冲突的场景(比如带撇号的字段值),容错逻辑就会失效,直接触发解析异常。
错误的客户端请求Body示例(可直接用标准JSON解析器验证报错):
{ 'name': [ {'tag': '1 ', 'value': 'O'Bryan'} }
符合规范的合法请求Body示例:
{ "name": [ {"tag": "1", "value": "O'Bryan"} ] }
不使用双引号能否从根源修复问题
明确结论:无法形成长期稳定的兼容方案:
- 坚持用单引号作为字符串边界的非标写法,天生和字段值内部的撇号存在逻辑冲突:只要字段值里出现单引号,就必须额外做转义处理(比如在单引号前加反斜杠),否则一定会出现解析截断问题。
- 就算临时加上转义逻辑,这类非标格式也没有统一的实现标准,不同构造工具、不同服务端解析器的转义规则可能存在差异,后续只要替换组件、升级解析版本就可能再次出现兼容故障。
- 从长期稳定性出发,要求客户端修正Body构造逻辑、统一使用双引号作为字符串和键名的包裹边界是最优方案。标准JSON规范下,撇号属于不需要转义的普通字符,类似
O'Bryan的值可以直接正常传输,不需要做额外处理,格式兼容性也能覆盖所有主流的服务端实现。
补充规则:标准JSON仅要求对字符串内部的双引号、反斜杠、换行/制表符等控制字符做转义,撇号无特殊处理要求。
内容的提问来源于stack exchange,提问作者Jonathan Hagen
相关产品推荐
相关产品推荐

