Skip to content

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'])}")
    return

2. 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 None

2. 检查数据格式

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 True

3. 处理嵌套 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