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

使用JSON.stringify序列化SheetJs对象时丢失__rowNum__属性的解决方法

解决SheetJS rowNum 无法被JSON.stringify序列化的问题

方法1:使用JSON.stringify的replacer函数主动包含__rowNum__

直接在JSON.stringify中传入自定义replacer,遍历每个对象时手动提取非枚举的__rowNum__属性:

const data = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
const jsonStr = JSON.stringify(data, (key, value) => {
  if (typeof value === 'object' && value !== null && '__rowNum__' in value) {
    // 复制原对象并添加可枚举的__rowNum__
    return { ...value, __rowNum__: value.__rowNum__ };
  }
  return value;
});

这个方法不需要修改原数据,通过replacer在序列化过程中动态补充属性,适合不想改动原始数据的场景。

方法2:将__rowNum__转为枚举属性(修改原数据)

遍历数据数组,用Object.defineProperty把每个对象的__rowNum__设置为可枚举:

const data = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
data.forEach(item => {
  if ('__rowNum__' in item) {
    Object.defineProperty(item, '__rowNum__', {
      enumerable: true,
      value: item.__rowNum__
    });
  }
});
// 现在JSON.stringify可以正常序列化__rowNum__了
const jsonStr = JSON.stringify(data);

这种方法直接修改原始对象的属性描述符,后续任何序列化操作都能包含该属性,适合需要多次使用处理后数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:39:51