JSON数据格式不对?别慌!一步步教你排查与解决
在开发过程中,JSON(JavaScript Object Notation)作为轻量级的数据交换格式,几乎无处不在——从前后端数据交互、API接口响应,到配置文件存储,都离不开它的身影,但“JSON格式不对”也是新手(甚至老手)常踩的坑:后端返回的数据前端解析失败,配置文件加载时报错,手动修改的JSON文件打不开……遇到这些问题别着急,本文将从“怎么判断格式不对”到“具体怎么排查解决”,一步步带你搞定JSON格式问题。
先判断:你的JSON真的“格式不对”吗?
JSON格式错误通常会在使用时直接暴露,常见场景包括:
- 前端解析报错:用JSON.parse()时提示“Unexpected token xxx in JSON at position X”;
- 工具/编辑器报错:VS Code、Postman等工具打开JSON文件时标红,提示“Invalid JSON syntax”;
- 程序运行异常:后端返回的JSON数据无法被Java/Python等语言解析,抛出JsonSyntaxException或类似异常;
- 接口调用失败:API接口返回的HTTP状态码是200,但数据体无法解析,实际是JSON格式问题导致请求无效。
如果出现以上情况,基本可以确定是JSON格式出了问题,我们就按“从外到内、从简到繁”的顺序排查。
排查与解决:5步搞定JSON格式错误
第1步:检查最基础的“语法错误”——新手最容易犯
JSON格式有严格的语法规则,90%的格式错误都来自基础语法不合规,先对照这5个核心规则自查:
① 双引号“”而非单引号‘’
JSON标准要求所有字符串必须用双引号包裹,单引号是非法的。
❌ 错误示例:{'name': '张三', 'age': 18}
✅ 正确写法:{"name": "张三", "age": 18}  
② 键名必须加双引号,且不能是“裸”字符串
JSON的键(key)必须是字符串,必须用双引号包裹;不能直接写变量名或裸露的字符串。
❌ 错误示例:{name: "张三", "age": 18}(键名name没加双引号)
✅ 正确写法:{"name": "张三", "age": 18}  
③ 值(value)的类型要合规
JSON支持的值类型只有6种:
- 字符串(双引号包裹,如"text")
- 数字(整数、浮点数,如18、14,不能用科学计数法如1e3)
- 布尔值(true/false,全小写,不能是True/False)
- null(全小写,不能是NULL或Null)
- 数组(方括号包裹,如[1, 2, "a"])
- 对象(花括号包裹,如{"key": "value"})
❌ 常见错误:
- 布尔值大写:{"isStudent": True}→ ✅{"isStudent": true}
- null大小写:{"data": Null}→ ✅{"data": null}
- 数字用科学计数法:{"value": 1e3}→ ✅{"value": 1000}
④ 逗号“,”的正确使用
- 
对象或数组中,最后一个元素不能有逗号(这是最常见的错误之一!)。 
 ❌ 错误示例:
 {"name": "张三", "age": 18,}(对象末尾多逗号)
 [1, 2, 3,](数组末尾多逗号)
 ✅ 正确写法:
 {"name": "张三", "age": 18}
 [1, 2, 3]
- 
逗号必须分隔“键值对”或“元素”,不能单独存在或出现在错误位置。 
 ❌ 错误示例:{"name": "张三", "age": 18, "hobby": ["读书", "跑步",]}(嵌套数组末尾多逗号)
⑤ 花括号和方括号[]必须成对且嵌套正确
对象用包裹,数组用[]包裹,必须确保开闭括号匹配(类似括号匹配问题)。
❌ 错误示例:  
- 缺少右括号:{"name": "张三", "age": 18(对象没闭合)
- 括号嵌套错误:{"name": "张三", "hobby": ["读书", "跑步"}(数组没闭合,且对象也没正确闭合)
第2步:用工具快速定位错误——别手动“肉眼排查”
基础语法错误多而杂,手动逐行检查容易漏,推荐用工具自动定位:
① 在线JSON校验工具(适合小文件/快速检查)
推荐工具:
- JSONLint:最经典的在线JSON校验,粘贴JSON后会直接报错,并标出错误位置(如“Expected at line 2 column 5”)。
- Be JSON:除了校验,还能格式化JSON、转义字符处理,适合中文场景。
使用方法:复制你的JSON代码,粘贴到输入框,点击“Validate”或“校验”,工具会返回错误提示。
② 编辑器/IDE内置校验(边写边查,效率更高)
- VS Code:默认支持JSON语法高亮,格式错误处会标红,鼠标悬停会显示错误信息(如“Invalid character”),按Shift+Alt+F可自动格式化(会自动修复简单错误,如多余逗号、缩进问题)。
- JetBrains系列(IDEA、PyCharm等):打开JSON文件时,右键选择“Reformat Code”可格式化,错误处会标红并提示。
- Postman:如果是API返回的JSON,在Response body中格式错误会直接标红,点击“Pretty”按钮格式化时会报错。
③ 命令行工具(适合服务器/脚本环境)
- Python:用json模块解析,错误信息会精确到位置:import json data = '{"name": "张三", "age": 18,}' # 多个逗号 try: json.loads(data) except json.JSONDecodeError as e: print(f"JSON错误:{e}") # 输出:JSON错误:Expecting property name enclosed in double quotes: line 1 column 23 (char 22)错误信息会明确提示“在第几行第几列、字符位置、具体问题”(如“Expecting property name enclosed in double quotes”表示缺少键名的双引号)。 
第3步:关注特殊字符——隐藏的“格式杀手”
JSON对特殊字符有严格要求,稍不注意就会出错:
① 字符串中的双引号必须转义
如果字符串本身包含双引号,必须用\(反斜杠)转义,否则会被误认为字符串结束。
❌ 错误示例:{"desc": "他说:"你好!",我很开心"}(字符串中间的"你好!"未转义)
✅ 正确写法:{"desc": "他说:\"你好!\",我很开心"}(用\转义内部双引号)  
② 反斜杠\本身也要转义
如果字符串需要包含反斜杠(如路径"C:\Users"),必须用\\表示(因为\在JSON中是转义字符)。
❌ 错误示例:{"path": "C:\Users"}(\U会被误认为转义字符)
✅ 正确写法:{"path": "C:\\Users"}(双反斜杠表示一个\)  
③ 控制字符需要转义
字符串中不能直接包含换行符\n、制表符\t等控制字符(除非转义)。
❌ 错误示例:{"msg": "第一行\n第二行"}(换行符未转义)
✅ 正确写法:{"msg": "第一行\n第二行"}(\n是合法的转义字符)
但如果是多行字符串,必须写成一行(JSON不支持多行字符串字面量)。  




 
		 
		 
		 
		
还没有评论,来说两句吧...