JSON常见踩坑问题与实战避坑案例代码
一、文档概述
JSON 是前后端交互、配置文件、数据存储中最常用的数据格式,因其轻量、易解析的特性被广泛使用。但在日常开发中,语法书写、数据类型、转义字符、解析规则等问题极易引发报错、数据错乱、程序崩溃等问题。本文结合实际开发场景,梳理JSON高频踩坑点,并搭配可运行代码演示问题现象与正确解决方案,帮助开发者规避常规错误。
二、JSON核心语法基础回顾
标准JSON有严格语法规范,这也是多数错误的根源:
- 键名必须使用双引号包裹,单引号、无引号均不合法;
- 字符串值仅支持双引号,禁止单引号;
- 不允许出现注释(
//、/* */注释都会导致解析失败); - 数组、对象末尾不能添加多余逗号;
- 支持的数据类型仅为:字符串、数字、布尔值、数组、对象、
null,无undefined、函数等类型。
三、高频踩坑案例+代码演示
本文以Python语言为例进行代码演示,Python内置json库实现JSON序列化与反序列化,贴近日常开发场景。
案例1:键名使用单引号/无引号(语法错误)
问题描述
新手常使用Python字典写法书写JSON,将键名用单引号包裹,或直接省略引号,标准JSON解析器会直接抛出解析异常。 错误JSON示例
json
{
'name': "张三",
age: 20
}
代码复现
python
import json
# 错误格式JSON字符串(单引号+无引号键名)
error_json_str = "{'name': '张三', age: 20}"
try:
data = json.loads(error_json_str)
except json.JSONDecodeError as e:
print(f"解析失败:{e}")
运行结果:程序抛出JSONDecodeError,解析终止。
正确写法
JSON键名统一使用双引号:
json
{
"name": "张三",
"age": 20
}
python
# 正确格式
right_json_str = '{"name": "张三", "age": 20}'
data = json.loads(right_json_str)
print(data)
案例2:对象/数组末尾添加多余逗号
问题描述
编写JSON时,在最后一个元素后添加逗号,多数严格解析器无法识别,是前后端联调高频坑点。 错误JSON示例
json
{
"id": 1,
"hobby": ["读书", "运动",]
}
代码复现
python
import json
error_str = '''
{
"id": 1,
"hobby": ["读书", "运动",]
}
'''
try:
res = json.loads(error_str)
except json.JSONDecodeError as e:
print(f"多余逗号报错:{e}")
正确写法
删除末尾多余逗号:
json
{
"id": 1,
"hobby": ["读书", "运动"]
}
案例3:JSON中添加注释
问题描述
部分开发者习惯在JSON中添加代码注释用于说明,但标准JSON不支持任何注释 ,解析会直接失败。 错误JSON示例
json
{
"username": "test", // 用户名
"password": "123456" /* 登录密码 */
}
代码复现与解决方案
python
import json
# 带注释的错误JSON
comment_json = '''
{
"username": "test", // 用户名
"password": "123456"
}
'''
try:
json.loads(comment_json)
except json.JSONDecodeError:
print("JSON禁止添加注释,解析失败")
解决方案:移除所有注释,若需要备注,可单独建立说明文档,不要写入JSON文件。
案例4:特殊字符未转义
问题描述
当字符串包含双引号、换行符、反斜杠 等特殊字符时,不做转义会破坏JSON结构。 错误示例:字符串内包含双引号
json
{
"content": "他说:"今天天气很好""
}
代码演示与修复
JSON中使用\转义特殊字符:
python
import json
# 包含双引号、换行符的内容
content = '他说:"今天天气很好"\n心情愉悦'
data = {"content": content}
# 序列化为标准JSON(自动转义)
json_str = json.dumps(data, ensure_ascii=False)
print("标准JSON:", json_str)
# 反序列化验证
parse_data = json.loads(json_str)
print("解析结果:", parse_data["content"])
json.dumps会自动完成字符转义,手动编写JSON时需手动添加转义符\。
案例5:数据类型不兼容
问题描述
JSON不支持undefined、函数、日期对象等非标准类型,直接序列化会出现数据丢失或报错。
代码演示
python
import json
from datetime import datetime
# 包含日期对象(非JSON标准类型)
data = {"name": "李四", "create_time": datetime.now()}
try:
json.dumps(data)
except TypeError as e:
print(f"类型不兼容报错:{e}")
解决方案:将日期、特殊对象转为字符串/数字等JSON标准类型后再序列化。
四、总结
JSON的错误大多源于不遵守原生语法规范,日常开发中牢记五大核心规则:键名双引号、禁止注释、无尾逗号、特殊字符转义、限定标准数据类型。对接第三方接口、读取配置文件、前后端数据交互时,优先使用官方内置解析库,避免手动拼接JSON字符串,能大幅降低出错概率。遇到解析报错时,优先检查语法格式、特殊字符与数据类型,可快速定位问题。
海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】公众号