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

Node.js使用JSON.parse解析文件时报Unexpected end of JSON input错误如何解决

问题原因与解决方案

你遇到的两个报错关联逻辑为:Uncaught SyntaxError: Unexpected end of JSON input 是根因,JSON解析失败抛出未捕获的异常导致进程崩溃,才触发了nodemon的[nodemon] app crashed - waiting for file changes before starting提示。

核心报错原因

JSON.parse()只能接收完整、格式合法的JSON字符串,触发报错的常见原因如下:

  • 按\n拆分txt内容后,最后一行大概率是空字符串(绝大多数txt文件末尾会自带换行符),空内容传入JSON.parse()直接触发语法错误
  • 部分行替换单引号为双引号后,本身仍然不符合JSON格式要求,比如存在未闭合的引号、多余的逗号、属性名未加引号等问题
  • 原代码逻辑存在瑕疵:初始定义file_Data为数组,循环中直接给它赋值为字符串,解析结果会被逐次覆盖,不过这不是触发本次报错的直接原因

修复方案

修复后的完整代码如下:

const fs = require('fs');

fs.readFile("./Files/success-2021-10-16.txt", "utf8", (err, data) => {
  if (err) throw new Error("Testing error messages here...");
  // 拆分后先过滤空行、纯空格行
  const lineArray = data.toString().split("\n").filter(line => line.trim() !== '');
  const parsedData = [];

  for (const line of lineArray) {
    try {
      // 替换单引号为双引号后解析
      const processedLine = line.replace(/'/g, '"');
      const parsedLine = JSON.parse(processedLine);
      parsedData.push(parsedLine);
      console.log('解析成功:', parsedLine);
    } catch (parseError) {
      // 捕获单条解析错误,不会导致整个进程崩溃
      console.error(`解析失败,行内容:${line},错误信息:${parseError.message}`);
    }
  }

  console.log(`解析完成,共成功解析${parsedData.length}条数据`);
});

改动说明

  • 拆分换行后新增过滤逻辑,排除空行、纯空格行,避免无效内容传入JSON.parse
  • 新增try/catch包裹JSON解析逻辑,单条内容解析失败只会打印错误日志,不会抛出未捕获异常导致整个进程崩溃,nodemon就不会触发服务挂掉的提示
  • 修正原数组存储逻辑,用push方法把每条解析成功的结果存入数组,避免结果被覆盖
  • 把for...in遍历数组改为for...of,避免遍历到数组原型上的额外属性导致异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:54:02