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

读取CSV生成DOM后JSON键自动附带\r字符的问题求解

问题成因

  • Windows系统生成的文本文件默认换行符为\r\n(回车+换行),你当前仅用\n分割CSV文件内容,导致拆分后的每一行末尾残留了不可见的\r控制字符
  • 回车符在普通字符串打印时不会显性展示,因此你之前打印模块名时未发现异常,但该字符实际存在于字符串中,会随着赋值被带入元素id、JSON键中,最终出现你观测到的问题。

解决方案

推荐从CSV读取的源头处理,彻底避免残留控制字符:

方案1:优化CSV拆分逻辑

修改文件读取后的拆分代码,兼容两种操作系统的换行符,同时过滤空行:

if (!this.files || !this.files[0]) return;
const FR = new FileReader();
FR.addEventListener("load", (evt) => {
  // 替换原有拆分逻辑,兼容\r\n和\n两种换行,同时清洗每行内容、过滤空行
  const x = evt.target.result.split(/\r?\n/)
    .map(line => line.replace(/\r$/, '').trim())
    .filter(line => line.length > 0);
  console.log(x+","+x.length);
  var top=180;
  var left=0;
  for(i in x){
    append_module_name_to_drag_div(x[i],top,left);
  }
}
FR.readAsText(this.files[0],"ISO-8859-3");

该方案可直接替代原有代码,无需再单独调用splice删除最后一行空内容。

方案2:在生成JSON时清洗键名

如果不想改动上游读取、生成元素的逻辑,可以在组装JSON对象时对键名做清洗:

var jsonData = {};
var childDivs = document.querySelector('#markers').children;
for( i=0; i< childDivs.length; i++ ){
  if(childDivs[i].tagName==="DIV" && childDivs[i].children[0].children[0].className==="level0"){
    // 对取到的id做回车符移除和空白修剪
    var module_name_=childDivs[i].id.replace(/\r/g, '').trim();
    console.log(module_name_+"..")

    var coordinates =return_coordinates_of_module(module_name_);
    
    jsonData[module_name_]=[coordinates[0],coordinates[1]];

    }
}
console.log(jsonData);

内容的提问来源于stack exchange,提问作者ab.fe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:24:04