从Response.json()返回的JSON验证无效,请求分析原因
JSON验证失败的问题修复
问题场景
在验证应用输出的JSON时,工具提示无效,但该JSON能通过fetch()的Response.json()正常解析,原代码如下:
{ records: [{ id: 70, whse: '00', partNo: '100E', description: '1" EMT CONDUIT (BUNDLE QTY. 1000FT)', }], start: 0, limit: 10, count: 1 }
验证时的错误提示:
Error: Parse error on line 1: { records: [{ id: 70 --^ Expecting 'STRING', '}', got 'undefined'
错误原因
JSON是严格格式的文本规范,和JS对象字面量存在区别,你的代码不符合JSON标准的核心问题有4点:
- 所有键名(比如
records、id)必须用双引号包裹,不能省略引号或使用单引号 - 字符串值必须用双引号包裹,不能用单引号
- 数组/对象的最后一个元素后不能加尾随逗号(trailing comma)
- 字符串中的双引号需要用
\"转义,而非HTML转义字符"
修复后的有效JSON
{ "records": [ { "id": 70, "whse": "00", "partNo": "100E", "description": "1\" EMT CONDUIT (BUNDLE QTY. 1000FT)" } ], "start": 0, "limit": 10, "count": 1 }
补充说明
Response.json()能解析你的代码,是因为部分浏览器的JSON解析器对非严格的JS对象格式做了兼容,但这不符合JSON官方规范,因此在严格的JSON验证工具中会报错。要保证JSON的通用性,必须严格遵循格式要求。
内容的提问来源于stack exchange,提问作者JLCarveth
相关产品推荐
相关产品推荐

