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

k6性能测试中JSON超长整数解析失真,求无需修改后端的解决方法

在k6中处理超出JavaScript安全整数范围的长整型ID问题

问题根源

后端返回的ID(2733382000000000049)远大于JavaScript的Number.MAX_SAFE_INTEGER(9007199254740991),使用response.json()解析时,JavaScript会自动将超出安全范围的整数转换为近似值,导致末尾精度丢失。另外你遇到的response.body()报错,是因为k6中response.body是属性而非方法,正确写法是response.body。

解决方法(无需修改后端)

方法1:使用第三方JSON解析器保留大整数

使用json-bigint库解析JSON,它会将大整数转为BigInt类型,避免精度丢失。

  1. 本地安装依赖:
npm install json-bigint
  1. 在k6脚本中使用:
import JSONbig from 'json-bigint';

export default function () {
  const res = http.get('目标请求URL');
  const parsedData = JSONbig.parse(res.body);
  // 将BigInt转为字符串使用
  const id = parsedData.item.id.toString();
  console.log(id); // 输出原始值:2733382000000000049
}

方法2:手动修改响应体字符串(无依赖)

通过正则表达式将响应体中的目标大整数字段替换为字符串,再用原生JSON.parse解析:

export default function () {
  const res = http.get('目标请求URL');
  // 正则匹配id字段后的大整数,替换为字符串形式
  const modifiedBody = res.body.replace(/"id":(\d{17,})/, '"id":"$1"');
  const parsedData = JSON.parse(modifiedBody);
  console.log(parsedData.item.id); // 输出字符串格式的原始ID
}

注意:需根据实际响应格式调整正则表达式,确保仅匹配目标字段,避免误替换其他数字。

方法3:使用response.json()的reviver函数(局限性说明)

k6的response.json()支持传入reviver函数,但由于JavaScript解析前已丢失精度,此方法无法恢复原始末尾数字,仅作补充参考:

export default function () {
  const res = http.get('目标请求URL');
  const parsedData = res.json((key, value) => {
    if (typeof value === 'number' && !Number.isSafeInteger(value)) {
      return value.toString();
    }
    return value;
  });
  // 注意:此处输出的是丢失精度后的字符串(2733382000000000000),无法恢复原始值
  console.log(parsedData.item.id);
}

内容的提问来源于stack exchange,提问作者Artur Korobeynyk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:17:33