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

为何JSON返回极小科学计数数值且解析后数组为空?

关于你遇到的两个JSON解析问题

一、为什么JSON会返回极小的科学计数法数值?

那些像2.2348142859517371e-314、6.9531204333502763e-310的数值,本质是未初始化/未赋值的数值类型变量被序列化后的“脏数据”,常见原因有这几种:

  • 后端数据处理漏洞:如果后端代码里某个浮点型字段(比如double/float)没有被正确初始化或赋值,内存里残留的随机极小值就会被直接序列化成JSON返回。比如在C++/Java这类语言里,未赋值的局部变量会包含内存里的垃圾值,当这些变量被塞进JSON结构时,就会出现这类奇怪的数值。
  • 浮点数精度下溢:极少数情况下,后端在计算数值时出现了浮点数下溢(比如除以一个极大的数,或者多次迭代计算后数值趋近于零但没被正确截断),最终生成了这种接近零的极小值,被JSON序列化成科学计数法。
  • 排除前端解析问题:如果是前端解析导致的,一般不会出现这么统一的极小值,所以优先排查后端的字段初始化逻辑。

解决方向:

  • 检查后端对应字段的赋值逻辑,确保所有数值类型字段在序列化前都被正确初始化(比如默认设为0,或者根据业务逻辑赋值)。
  • 如果是计算导致的下溢,在计算后添加数值截断逻辑,把极小值直接转为0。

二、为什么函数能打印出值,但最终返回空数组?

这个问题几乎90%都是异步操作的时序问题,剩下的是作用域或变量赋值错误,具体分析:

最常见的情况:异步请求未等待完成就返回

比如你写的函数里发起了网络请求,但没有等待请求完成就直接return了空数组。举个JavaScript例子:

function fetchAndParse() {
  let result = [];
  fetch('/api/data')
    .then(res => res.json())
    .then(data => {
      console.log(1, data.coords); // 这里能打印,因为是请求完成后的回调
      result = data.coords;
    });
  return result; // 这里直接返回空数组,因为fetch还没完成!
}

这种情况下,函数返回的是初始的空数组,而打印是在异步回调里执行的,所以你能看到值,但返回结果不对。

解决方法:

  • 把函数改成异步函数,用async/await等待请求完成:
async function fetchAndParse() {
  const res = await fetch('/api/data');
  const data = await res.json();
  console.log(1, data.coords);
  return data.coords; // 现在返回的是正确的解析后数据
}

其他可能的原因:

  • 变量作用域错误:比如在回调里重新声明了变量(用了let/const),导致外部的数组没被赋值。比如:
function fetchAndParse() {
  let result = [];
  fetch('/api/data')
    .then(res => res.json())
    .then(data => {
      let result = data.coords; // 这里重新声明了result,外部的result还是空的!
      console.log(1, result);
    });
  return result;
}

解决:去掉回调里的let,直接赋值给外部的result。

  • 解析后的数据未正确赋值:比如你打印的是data里的某个字段,但返回的是另一个没被赋值的数组变量,检查变量名是否一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:05:13