Express的JSON解析中间件不接受null等合法JSON原语问题
核心问题解答
你对JSON规范的认知是完全正确的:RFC7159明确规定null、true、false、数字、字符串都属于合法的JSON顶层值,在Node.js和浏览器环境中执行JSON.parse('null')也确实可以正常得到返回结果。
你遇到的400报错是Express内置JSON解析中间件的默认配置限制导致的,和JSON本身的合法性无关。
具体原因
Express的express.json()中间件底层依赖body-parser模块的JSON解析能力,该模块默认开启了strict校验规则:
- 默认
strict: true时,仅允许请求体的JSON顶层值为对象{}或数组[],所有顶层为原语(null、布尔值、数字、字符串)的请求都会被判定为格式非法,抛出你收到的语法错误。
适配方案
如果你的业务场景确实需要接收顶层为原语的合法JSON请求,只需要修改中间件配置,关闭strict校验即可:
app.use(express.json({ strict: false }));
修改后解析逻辑会完全遵循RFC7159规范,支持所有合法JSON格式的解析。
内容的提问来源于stack exchange,提问作者Hairi
相关产品推荐
相关产品推荐

