nodejs 从文件中读取数据之后转为json格式报错

本文介绍了一种在从文件读取JSON数据时遇到的常见问题及解决方案,详细解释了如何避免因文件编码处理而导致的JSON.parse错误,并提供了一个实用的readText函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建一个json格式文件,保存json格式数据

使用readFile方法读取文件之后想着把数据转成json(因为读出来是字符串)之后添加数据的

使用JSON.parse发现报错了。。

经过Google发现是文件保存的时候会把数据做一些处理,导致我们看起来数据是没问题的但JSON.parse解析的时候会报错

下面提供解决方法:

function readText(pathname) {

    var bin = fs.readFileSync(pathname);

 

    if (bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {

        bin = bin.slice(3);

    }

 

    return bin.toString('utf-8');

}

亲测有效

具体解释请详见:https://www.cnblogs.com/XieJunBao/p/6285303.html

转载这位老哥的,为自己以后可能会碰到的坑提供一个解决办法

最后,向这位大佬表示感谢

### Node.js 中读取 JSON 文件的示例 在 Node.js 中,可以使用内置模块 `fs` 提供的功能来读取 JSON 文件。以下是两种常见的方法:异步读取和同步读取。 #### 1. **异步读取 JSON 文件** 异步操作不会阻塞事件循环,因此适合处理较大的文件或高并发场景。下面展示了如何通过 `fs.readFile` 方法读取 JSON 文件并将其解析为 JavaScript 对象。 ```javascript const fs = require('fs'); // 异步读取 JSON 文件 fs.readFile('data.json', 'utf8', (err, data) => { if (err) { console.error('读取文件时发生错误:', err); return; } try { const jsonData = JSON.parse(data); // 将 JSON 字符串换为对象 console.log('从文件中读取的数据:', jsonData); } catch (parseError) { console.error('解析 JSON 数据时发生错误:', parseError); } }); ``` 这段代码首先调用了 `fs.readFile` 方法以异步方式读取名为 `data.json` 的文件内容[^1]。接着,在回调函数中检查是否有错误;如果没有错误,则尝试将返回的字符串数据通过 `JSON.parse` 换为 JavaScript 对象,并打印出来。 --- #### 2. **同步读取 JSON 文件** 对于某些简单脚本或者初始化阶段的操作,可以选择使用同步版本的 API (`fs.readFileSync`) 来简化逻辑流控制。注意,这种方法会在 I/O 操作期间暂停整个程序执行,所以应谨慎使用。 ```javascript const fs = require('fs'); try { const data = fs.readFileSync('data.json', 'utf8'); // 同步读取文件内容 const jsonData = JSON.parse(data); // 解析成 JS 对象 console.log('从文件中读取的数据:', jsonData); } catch (error) { console.error('读取或解析 JSON 文件失败:', error.message); } ``` 这里我们用到了 `fs.readFileSync` 函数直接获取文件中的文本[^3]。由于它是同步的,所以在遇到任何异常之前都会先完成当前任务队列上的所有工作项。一旦捕获到错误(无论是文件访问还是 JSON 格式问题),就会立即终止进一步的动作并向终端报告具体情况。 --- #### 错误处理的重要性 无论采用何种方式进行文件读取,都应当妥善管理可能出现的各种异常情况。这不仅限于检测路径是否存在以及权限是否足够等问题,还包括验证所加载的内容确实遵循合法有效的 JSON 结构标准。只有这样才能确保应用程序具备足够的健壮性和可靠性。 --- #### 修改 JSON 数据并保存回文件 除了单纯地读取外,很多时候还需要更新这些配置信息后再存盘。下面是关于怎样把经过改动后的 JSON 数据重新写回到磁盘上去的一个例子: ```javascript const fs = require('fs'); let originalData = '{"name":"张三","age":30,"city":"北京"}'; // 初始状态假设已存在这样的字符串形式表示的对象 let jsonObject; try { jsonObject = JSON.parse(originalData); // 把原始数据成易于编辑的形式即 js object jsonObject.age += 1; // 更新年龄字段为例演示变更过程 let updatedJsonString = JSON.stringify(jsonObject, null, 4); // 再次序列化回去以便持久化存储 fs.writeFile('updated_data.json', updatedJsonString, (err) => { if (err) throw err; console.log('成功写入新的 JSON 数据!'); }); } catch(e){ console.error("无法解析或修改 JSON:", e); } ``` 此片段说明了当需要对先前提取出来的 JSON 表达式做出相应调整之后再把它送返给实际载体——硬盘驱动器上某个具体的文档位置去的时候应该怎么做[^2]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值