如何检查fs.read()读取的文件内容是否为空?避免JSON.parse报错
解决JSON.parse空文件报错的问题
嘿,这个坑我之前踩过!空文件或者只有空白字符的文件确实会让JSON.parse()直接抛出SyntaxError: Unexpected EOF,毕竟它没法解析空字符串。给你两个实用的解决方案:
方案一:先检查内容是否为空再解析
先读取文件内容,判断它是否为空(或者仅包含空白字符),再决定是否执行解析:
const filePath = 'path/to/file'; if (fs.exists(filePath)) { const fileContent = fs.read(filePath); // 用trim()剔除换行、空格等空白字符,避免假空文件报错 if (!fileContent.trim()) { // 这里处理空文件的情况,比如返回默认的空对象/数组 return {}; } return JSON.parse(fileContent); }
这个方法直接从源头避免了空内容进入JSON.parse,逻辑清晰。
方案二:用try-catch捕获解析错误(更健壮)
如果想同时处理空文件和无效JSON格式的情况,用try-catch包裹解析步骤会更稳妥:
const filePath = 'path/to/file'; if (fs.exists(filePath)) { try { const fileContent = fs.read(filePath); return JSON.parse(fileContent); } catch (error) { if (error instanceof SyntaxError) { // 空文件或无效JSON都会触发这个错误分支 console.log('文件内容无效(可能是空文件或JSON格式错误)'); return {}; // 返回你需要的默认值 } // 其他类型的错误重新抛出,避免吞掉异常 throw error; } }
这个方案覆盖了更多边界情况,实际项目里我更推荐用它,毕竟文件存在不代表内容一定是合法的JSON。
内容的提问来源于stack exchange,提问作者Robbert
相关产品推荐
相关产品推荐

