Node.js & JSON & import attributes All In One
你遇到的错误是因为 Node.js
对导入 JSON
的语法进行了调整:在较新的版本中,assert 关键字已被 with
关键字取代。这是由于 ECMAScript 标准的更新,将「导入断言」()更名为「导入属性」(import assertions
import attributes
)。
解决方案:将 assert 替换为 with
.
在 Node.js 18.17+
或支持最新标准的环境中,正确的 JSON 导入语法应为:
// 导入 JSON 文件(使用新的 with 语法)
import carData from './data/car-prices.json' with { type: 'json' };
注意事项
Node.js 版本要求:
with 关键字语法需要 Node.js 18.17.0+ 或更高版本(LTS 版本推荐 20.x+)。
如果你使用的是较旧的 Node.js 版本(如 16.x 或 18.16 以下),可能不支持 with,此时建议使用 fs 模块读取(见下方兼容方案)。
ES 模块环境:
必须在 ES 模块环境中使用(package.json 中需设置 "type": "module"),否则会报错。
TypeScript 兼容:
若使用 TypeScript,需要将 tsconfig.json 中的 target 设置为 ES2022 或更高,并确保 moduleResolution 为 NodeNext 或 Node16。
errors
使用 import assertions 时候,遇到以下错误
The assert
keyword in import attributes is deprecated and it has been replaced by the with
keyword. You can enable the deprecatedImportAssert
parser plugin to suppress this error. (18:38)
// 旧语法(已废弃)❌
// import carData from './car-data.json' assert { type: 'json' };
demos
import { readFile } from 'fs/promises';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';// 获取当前文件的目录路径(ES模块中没有 __dirname,需手动获取)
const __dirname = dirname(fileURLToPath(import.meta.url));
const jsonPath = join(__dirname, './data/car-prices.json');// 读取并解析 JSON
const loadCarData = async () => {try {const data = await readFile(jsonPath, 'utf8');return JSON.parse(data);} catch (err) {console.error('读取JSON失败:', err);throw err; // 抛出错误供上层处理}
};// 使用数据
const carData = await loadCarData();
console.log('2025年1月的Model Y价格:', carData["2025_01_13"]["Model Y"][0].price);
(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!
refs
https://www.cnblogs.com/xgqfrms/p/17260205.html
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!