Node.js 如何读取 JSON 文件到内存

Node.js 读取 JSON 文件:fs.readFile 读文本后 JSON.parse 解析,或 fs.promises 配合 await。小配置文件也可直接 require('./config.json)(会缓存)。注意 JSON.parse 需 try-catch 容错。

最佳实践
文件、模块与依赖组织示意

两步:用 fs 模块读出文本,再 JSON.parse() 解析成对象。 推荐用 fs/promises 配 async/await;JSON.parse 必须包 try-catch,因为格式非法会抛同步异常。小的静态配置文件还可以直接 require(),会自动解析并缓存。

标准写法(async/await)

const fs = require('fs/promises');

async function loadConfig() {
  try {
    const text = await fs.readFile('./config.json', 'utf8');
    const config = JSON.parse(text);
    console.log(config);
    return config;
  } catch (err) {
    console.error('读取或解析失败:', err.message);
  }
}

回调式

const fs = require('fs');

fs.readFile('./config.json', 'utf8', (err, data) => {
  if (err) return console.error('读取失败:', err);
  try {
    const json = JSON.parse(data);
    console.log(json);
  } catch (e) {
    console.error('JSON 格式错误:', e);
  }
});

快捷方式:require

const config = require('./config.json');  // 自动 parse,且结果被缓存

注意三点:路径必须带 ./(相对当前文件);内容被缓存,文件改动后需清 require.cache 才会重读;只适用于可信的静态文件。

大文件别一次读

几百 MB 的 JSON(如日志导出)一次性读进内存会爆。改用流式解析库(stream-json)按记录逐条处理。

常见问题(FAQ)

Q:JSON.parse 报 "Unexpected token"?

文件不是合法 JSON:可能是 BOM 头(先 text.replace(/^\uFEFF/, ''))、尾逗号、注释(标准 JSON 不允许),或文件其实是 JSON Lines。

Q:JSON Lines(.jsonl)怎么读?

逐行读再逐行 parse:读出文本后 text.split('\n').filter(Boolean).map(JSON.parse),大文件用 readline 流式逐行。

Q:ESM 项目里怎么读?

import { readFile } from 'node:fs/promises' 后同上;Node 20+ 也支持 import data from './config.json' with { type: 'json' }。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台