JSON不特殊处理空格,字符串内空格为U+0020,解析后可直接使用;HTML空格实体如 不属于JSON规范,混入属数据污染,应源头剥离或用CSS/语义方案解决。
JSON 本身不特殊处理空格——空格就是普通字符,直接存、原样取,不需要转义或编码。所谓“HTML5空格”(如 、 )是 HTML 渲染层的概念,进不到 JSON 里;JSON 只管字符串内容,不管它将来怎么被 HTML 解释。
你在 JSON 中写一个带空格的字符串,比如:
{"name": "Alice Smith", "desc": " hello world "}里面的空格就是原始的 U+0020 空格字符,解析后 JS/Python 拿到的就是标准空格,可直接用于 trim()、split(' ') 等操作。
注意点:
JSON.parse() 会忽略它们(但字符串值内部的空格不会被忽略)\u00a0 或 存进 JSON——前者是 Unicode 不间断空格(U+00A0),后者是 HTML 实体,不是 JSON 合法字符 字面量(即四个字符 ),说明数据源已混入 HTML 转义逻辑,这不是 JSON 的责任,而是上游生成时就错了如果你的真实需求是:前端渲染时让多个空格不被 HTML 合并(即实现 white-space: pre 效果),那解决方案不在 JSON 层,而在使用层:
{"content": "a b c"}white-space: pre-wrap 或 white-space: pre-line 渲染该字段textContent 赋值(而非 innerHTML),避免浏览器自动折叠空白 然后用 innerHTML 渲染——这既破坏数据纯度,又引入 XSS 风险(除非你严格过滤)常见现象:JSON 里明明写了多个空格,JS 解析后 str.length 却变短了,或 console.log 看起来像被压缩了。
innerHTML 渲染——浏览器会合并连续空白,跟 JSON 无关String.prototype.trim()、replaceAll(/\s+/g, ' ') 等清理逻辑JSON.stringify(str) 打印原始字符串,看 Unicode 编码:"\u00a0" 是不间断空格,"\u0020" 才是普通空格;混用会导致表现不一致真正容易被忽略的是:前后端对“空格语义”的约定。比如编辑器输入的 被富文本组件转成 HTML 字符串再塞进 JSON,这时空格已不是空格,而是 HTML 数据污染。处理这类场景,得在入库前剥离 HTML 标签和实体,或统
一用 Markdown/自定义标记代替。JSON 的干净,靠的是源头控制,不是后期转义。