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

JSON.parse将嵌套数组中的数值转为null的异常问题求助

问题原因分析与排查步骤

首先,你提供的JSON字符串是完全合法的,直接使用JSON.parse解析会得到正确结果——[33,0]和[1,0]数组会被正常保留,不会转为null。你遇到的异常大概率不是JSON.parse本身的问题,而是以下几种情况之一:

1. 解析后的对象被后续代码篡改

最可能的原因是:在JSON.parse完成后,你的代码中其他逻辑(比如数据处理、状态同步或第三方库)立即修改了adminData,把这些数值数组替换成了null。

浏览器控制台的惰性求值特性会加剧这个误解:当你console.log(adminData)时,控制台并不会立即快照对象的所有属性,而是在你点击展开日志时才读取对象的当前状态。如果此时对象已经被修改,你看到的就是篡改后的null值,而非JSON.parse返回的原始结果。

验证方法:

在解析后立即序列化对象,生成不可变的快照日志:

var adminData = JSON.parse(brackets[id].data);
// 快照解析后的原始状态
console.log("解析后原始状态:", JSON.stringify(adminData));
console.log("ADMIN DATA");
console.log(adminData);

如果快照显示[33,0]和[1,0]存在,说明JSON.parse是正确的,问题出在后续代码的篡改上。

2. 待解析的JSON字符串已被篡改

你提供的JSON字符串是正确的,但实际运行时brackets[id].data可能已经被其他代码修改(比如某些逻辑替换了字符串中的[33,0]为null),导致解析结果异常。

验证方法:

在解析前直接输出原始字符串的内容和类型,确认它是未被修改的合法JSON:

console.log("原始数据类型:", typeof brackets[id].data);
console.log("原始数据内容:", brackets[id].data);
// 验证字符串是否合法JSON
try {
  JSON.parse(brackets[id].data);
  console.log("原始数据是合法JSON");
} catch(e) {
  console.error("原始数据JSON格式错误:", e);
}

如果输出的字符串中[33,0]已经变成null,说明在解析前数据就被篡改了。

3. 控制台显示的误导

如前所述,浏览器控制台对对象的日志是惰性的。如果你在console.log(adminData)后修改了对象,展开日志时看到的是修改后的状态,而非解析时的状态。

验证方法:

直接打印具体属性,避免依赖对象展开:

var adminData = JSON.parse(brackets[id].data);
console.log("结果数组第一个元素:", adminData.results[0][0][0][0]);

如果这个输出是[33,0],说明解析正确,只是控制台展示的问题。

排查建议

  1. 在JSON.parse后立即设置断点,用调试器查看adminData的原始状态,确认数组是否存在。
  2. 检查代码中所有修改adminData或brackets[id].data的逻辑,找出可能的篡改点。
  3. 避免直接依赖控制台的对象展开结果,改用序列化快照或直接打印具体属性来验证数据状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:50:05