我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ECMAScript模块中nodejs怎么加载json文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ECMAScript模块中nodejs怎么加载json文件

这篇文章主要讲解了“ECMAScript模块中nodejs怎么加载json文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ECMAScript模块中nodejs怎么加载json文件”吧!

ECMAScript模块中nodejs怎么加载json文件

看完这篇文章,你将学到:

1、nodejs 如何加载、解析json文件

2、fs 模块如何读取json文件

3、学到import.meta.url

3、学到new URL()

4、学到load-json-file库

众所周知,如果是在CommonJS模块中加载json文件,只需通过require()函数直接加载即可,即能得到json对象。

但是在ECMAScript模块中直接加载json文件,会报错,报错如下:

ECMAScript模块中nodejs怎么加载json文件

首先,先启用ESM模式,其实官方文档(http://nodejs.cn/api/esm.html#introduction)中也有说明:

Node.js 默认将 JavaScript 代码视为 CommonJS 模块。 作者可以通过 .mjs 文件扩展名、package.json "type" 字段、或 --input-type 标志告诉 Node.js 将 JavaScript 代码视为 ECMAScript 模块

那怎么才能在ECMAScript模块加载json文件呢?其实是有两种方案的:

假设现在有一个json文件:test.json

文件内容如下:

{
    "name": "project"
}

接下来,在index.js中引入test.json:

一、 通过 fs 文件系统读取 json 文件

import { readFile } from "fs/promises"; // 以promise的方式引入 readFile API

const json = JSON.parse(
    await readFile(new URL('./test.json', import.meta.url))
)

console.log('[json1]:', json); // 输出: { "name": "project" }

解释:

await: 根据 ECMAScript 顶层 await 提案,await 关键字可用于模块内的顶层(异步函数之外);

import.meta.urlnodejs中返回模块在本地的file://协议的绝对路径,例如:file://home/user/main.js, 如果模块中还有另外一个文件test.js,那么test.js的路径就是new URL('test.js', import.meta.url)

new URL: 生成file: 协议的对象(对于大多数 fs 模块函数,pathfilename 参数可以作为使用 file: 协议的对象传入)。

二、 通过nodejs内置module模块的createRequire方法实现

import { createRequire } from "module";

const require = createRequire(import.meta.url);
const json = require('./test.json');

console.log('[json2]:', json); // 输出: { "name": "project" }

这种方法是根据nodejs提供的createRequire方法实现。

ECMAScript模块中nodejs怎么加载json文件

三、 24行源码的第三方库 load-json-file

load-json-file 是我在npm网站无意间发现的,源码只有仅仅24行,如下:

import {readFileSync, promises as fs} from 'node:fs';

const {readFile} = fs;

const parse = (buffer, {beforeParse, reviver} = {}) => {

	// Unlike `buffer.toString()` and `fs.readFile(path, 'utf8')`, `TextDecoder`` will remove BOM.
        // 这里对buffer进行转义,没有用`buffer.toString()`和`fs.readFile(path, 'utf8')`,是因为`new TextDecoder().decode(buffer)`这种方式可以删除字节顺序标记(BOM)
        
        // 解码 buffer 并返回字符串
	let data = new TextDecoder().decode(buffer);
        
        // 在parse解析之前对字符串进行处理
	if (typeof beforeParse === 'function') {
		data = beforeParse(data);
	}

	return JSON.parse(data, reviver);
};

// 导出异步方法
export async function loadJsonFile(filePath, options) {
        // 如果未指定编码,则返回原始缓冲区。
	const buffer = await readFile(filePath);
	return parse(buffer, options);
}

// 导出同步方法
export function loadJsonFileSync(filePath, options) {
        // 如果未指定编码,则返回原始缓冲区。
	const buffer = readFileSync(filePath);
	return parse(buffer, options);
}

load-json-file 源码 整体而言相对比较简单,但是也有很多可以学习深挖的学习的知识点。

感谢各位的阅读,以上就是“ECMAScript模块中nodejs怎么加载json文件”的内容了,经过本文的学习后,相信大家对ECMAScript模块中nodejs怎么加载json文件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ECMAScript模块中nodejs怎么加载json文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python怎么加载JSON文件

在 Python 中加载 JSON 文件可以使用 json 模块。下面是一个示例代码:import json# 读取 JSON 文件with open('data.json', 'r') as f
Python怎么加载JSON文件
2024-03-05

ThinkPHP中怎么增加模块文件

本篇内容介绍了“ThinkPHP中怎么增加模块文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ThinkPHP框架的结构:框架核心文件为T
2023-07-05

nodejs中的crypto加密模块怎么用

这篇文章将为大家详细讲解有关nodejs中的crypto加密模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法。也提供了 Ope
2023-06-14

Angular中怎么懒加载模块并动态显示它的组件

本文小编为大家详细介绍“Angular中怎么懒加载模块并动态显示它的组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Angular中怎么懒加载模块并动态显示它的组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-04

权限管理模块中动态加载Vue组件怎么实现

本篇内容介绍了“权限管理模块中动态加载Vue组件怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!登录状态保存当用户登录成功之后,需要将
2023-06-19

怎么在HTML页面中实现模块化加载

这篇文章给大家介绍怎么在HTML页面中实现模块化加载,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。公共模板定义思考后发现可以把公共模板抽取到一个HTML文件中(文件名就暂定PublicModule.html),如下:<
2023-06-09

Hibernate中怎么加载配置文件

本篇文章给大家分享的是有关Hibernate中怎么加载配置文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在向大家详细介绍Hibernate加载配置文件之前,首先让大家了解下
2023-06-17

Node中的fs文件模块和path路径模块怎么使用

这篇“Node中的fs文件模块和path路径模块怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node中的fs文件模
2023-07-04

怎么在Phpstorm中限制加载文件

怎么在Phpstorm中限制加载文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Phpstorm算是编辑PHP代码一款比较好的工具,功能比较强大。但是若项目比
2023-06-15

spring中怎么加载xml配置文件

这篇文章主要讲解了“spring中怎么加载xml配置文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spring中怎么加载xml配置文件”吧!spring 中加载xml配置文件的方式spr
2023-06-03

怎么在IDEA中添加文件模板

今天就跟大家聊聊有关怎么在IDEA中添加文件模板,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.前言在Mybatis中需要创建的配置文件有sqlMapconfig.xml,映射文件
2023-06-14

怎么在Linux系统中以模块方式安装与卸载文件系统

怎么在Linux系统中以模块方式安装与卸载文件系统?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。以Fedora8下面安装minix文件系统为例: 为了保证与系统内核相匹配,
2023-06-10

怎么在python中使用shutil模块操作文件

这篇文章给大家介绍怎么在python中使用shutil模块操作文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明
2023-06-14

Python怎么实现从文件中加载数据

这篇文章主要介绍“Python怎么实现从文件中加载数据”,在日常操作中,相信很多人在Python怎么实现从文件中加载数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么实现从文件中加载数据”的疑
2023-06-30

浅析Node中http模块怎么处理文件上传

怎么使用Node.js的http模块处理文件上传?下面本篇文章就来看看在服务器端要如何处理前端上传的文件,希望对大家有所帮助!
2023-05-14

Angular懒加载动态怎么创建显示该模块下声明的组件

这篇文章主要介绍“Angular懒加载动态怎么创建显示该模块下声明的组件”,在日常操作中,相信很多人在Angular懒加载动态怎么创建显示该模块下声明的组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ang
2023-06-30

编程热搜

目录