You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CleverTap数据上报JSON解析错误求助(Next.js 13+SDK v1.9.0)

解决CleverTap上报时的JSON解析错误问题

针对你遇到的仅95%事件能正常追踪、剩余因JSON解析失败的问题,结合报错信息和代码,给出以下排查方向和解决方案:

核心原因分析

报错来自CleverTap SDK内部的JSON解析逻辑,说明生产环境中部分上报的payload存在JSON不合法的情况——比如包含无法序列化的类型(undefined/function)、未转义的特殊字符(引号、换行符),或者格式异常的值(如第二个报错中的标识符字符串可能是未正确处理的变量而非字符串值)。

你的try/catch无法捕获该错误,因为错误发生在SDK内部代码执行阶段,而非你调用push的代码块中。


解决方案

1. 强制校验并净化Payload

在调用CleverTap的push方法前,先通过JSON.stringify+JSON.parse的方式过滤掉不可序列化的内容,确保payload是纯合法JSON对象:

function pushEvent(eventName: string, payload: {}) {
  try {
    // 序列化后再解析,自动过滤undefined/function等不可序列化内容,修复格式问题
    const safePayload = JSON.parse(JSON.stringify(payload));
    typeof window !== 'undefined' && window?.clevertap?.event?.push(eventName, safePayload);
  } catch(err) {
    console.log("error in CT pushEvent", err);
    Sentry.captureMessage(`error in CT pushEvent - mWeb, ${JSON.stringify(err)}`);
  }
}

2. 手动净化字符串字段

如果Payload中存在包含特殊字符的字符串(如未转义的引号、换行符),可以单独处理这些字段:

// 净化字符串:移除控制字符,转义双引号
const sanitizeString = (value: string): string => {
  return value.replace(/[\n\r\t]/g, '').replace(/"/g, '\\"');
};

// 在构建或传入payload前处理所有字符串字段
const sanitizePayload = (payload: {}): {} => {
  return Object.fromEntries(
    Object.entries(payload).map(([key, value]) => {
      return typeof value === 'string' ? [key, sanitizeString(value)] : [key, value];
    })
  );
};

// 修改pushEvent使用净化后的payload
function pushEvent(eventName: string, payload: {}) {
  try {
    const safePayload = sanitizePayload(JSON.parse(JSON.stringify(payload)));
    typeof window !== 'undefined' && window?.clevertap?.event?.push(eventName, safePayload);
  } catch(err) {
    console.log("error in CT pushEvent", err);
    Sentry.captureMessage(`error in CT pushEvent - mWeb, ${JSON.stringify(err)}`);
  }
}

3. 升级CleverTap SDK版本

你使用的clevertap-web-sdk v1.9.0可能存在已知的JSON解析bug,尝试升级到最新稳定版,官方可能已经修复了这类边缘场景的解析问题。

4. 捕获出错的具体Payload(用于排查)

为了定位具体是哪些Payload导致错误,可以添加全局错误监听,记录出错时的Payload内容:

let lastReportedPayload: {} | null = null;

if (typeof window !== 'undefined') {
  // 监听全局错误,捕获CleverTap的JSON解析错误
  window.addEventListener('error', (event) => {
    if (event.error?.message?.includes('JSON Parse error') && event.filename?.includes('clevertap.min.js')) {
      console.error('CleverTap解析失败,最近上报的Payload:', lastReportedPayload);
      Sentry.captureMessage(`CT JSON解析错误 - Payload: ${JSON.stringify(lastReportedPayload)}`);
    }
  });
}

function pushEvent(eventName: string, payload: {}) {
  lastReportedPayload = payload;
  try {
    const safePayload = JSON.parse(JSON.stringify(payload));
    typeof window !== 'undefined' && window?.clevertap?.event?.push(eventName, safePayload);
  } catch(err) {
    console.log("error in CT pushEvent", err);
    Sentry.captureMessage(`error in CT pushEvent - mWeb, ${JSON.stringify(err)}`);
  }
}

内容的提问来源于stack exchange,提问作者anas ygag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:55:53