JSON 解析问题故障排除
常见 JSON 解析错误
1. JSONDecodeError: Expecting value
原因
接收到空数据或非 JSON 格式数据
解决方案:
python
try:
data = json.loads(event["data"])
except json.JSONDecodeError as e:
print(f"JSON解析失败: {e}")
print(f"原始数据: {repr(event['data'])}")
return2. JSONDecodeError: Unterminated string
原因
JSON 字符串被截断或包含特殊字符
解决方案: 检查数据完整性,处理特殊字符
3. JSONDecodeError: Extra data
原因
JSON 数据后有多余字符
解决方案: 清理数据,去除多余字符
JSON 解析调试技巧
1. 启用详细日志
python
def debug_json_parse(json_str, context=""):
print(f"[DEBUG] {context} 原始数据: {repr(json_str)}")
try:
data = json.loads(json_str)
print(f"[DEBUG] {context} 解析成功: {data}")
return data
except json.JSONDecodeError as e:
print(f"[ERROR] {context} 解析失败: {e}")
return None2. 检查数据格式
python
def validate_sse_data(data):
if not isinstance(data, dict):
print(f"[WARNING] 数据不是字典格式: {type(data)}")
return False
required_fields = ["type", "sequence_number"]
for field in required_fields:
if field not in data:
print(f"[WARNING] 缺少必需字段: {field}")
return False
return True3. 处理嵌套 JSON
python
def parse_nested_json(data):
# 检查是否有嵌套的data字段
if "data" in data and isinstance(data["data"], str):
try:
nested_data = json.loads(data["data"])
return nested_data
except json.JSONDecodeError:
pass
return data