Rumah > Artikel > hujung hadapan web > Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript
Cara memuatkan fail json dalam nod dalam modul ECMAScript" Artikel berikut akan memperkenalkan kepada anda cara nodejs memuatkan fail json dalam modul ECMAScript. Saya harap ia akan membantu anda!
Selepas membaca artikel ini, anda akan belajar:
1, nodejs Cara memuatkan dan menghuraikan fail json
2. Cara modul fs membaca fail json
3. Belajar import.meta.url
3 Belajar URL()
4. Belajar perpustakaan load-json-file
Seperti yang kita semua tahu, jika anda memuatkan fail CommonJS模块
dalam json
, anda hanya perlu memuatkannya terus melalui fungsi require()
, dan anda akan mendapat json
Objek.
Tetapi jika anda memuatkan fail json terus dalam ECMAScript模块
, ralat akan dilaporkan seperti berikut:
Pertama. , dayakan mod
ESM
Malah, dokumentasi rasmi (http://nodejs.cn/api/esm.html#introduction) juga menyatakan:Node.js merawat. Kod JavaScript sebagai modul CommonJS secara lalai. Pengarang boleh memberitahu Node.js untuk menganggap kod JavaScript sebagai modul ECMAScript melalui
.mjs
sambungan fail, medanpackage.json
"type"
atau bendera--input-type
Bagaimana pula dengan memuatkan ECMAScript模块
fail? Sebenarnya, terdapat dua penyelesaian: json
test.json
{ "name": "project" }Seterusnya , dalam
Diperkenalkan dalam 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" }Penjelasan:
: Menurut await
ECMAScript peringkat teratas cadangan await
, kata kunci boleh digunakan di peringkat teratas dalam modul (di luar fungsi tak segerak); await
mengembalikan tempatan Laluan mutlak protokol, contohnya:
dalam modul, maka laluan import.meta.url
ialah nodejs
; file://
file://home/user/main.js
test.js
: Hasilkan test.js
objek protokol (untuk kebanyakan new URL('test.js', import.meta.url)
fungsi modul, parameter
boleh dihantar sebagai objek menggunakan protokol new URL
). file:
fs
2. Pelaksanaan melalui kaedah path
modul filename
terbina dalam file:
nodejs
Kaedah ini dilaksanakan berdasarkan kaedah module
yang disediakan oleh createRequire
. import { createRequire } from "module"; const require = createRequire(import.meta.url); const json = require('./test.json'); console.log('[json2]:', json); // 输出: { "name": "project" }
nodejs
createRequire
3 Pustaka pihak ketiga dengan 24 baris kod sumber
load-json-file
load-json-file source code Secara keseluruhan, ia agak mudah, tetapi ada juga banyak yang perlu dipelajari dan digali lebih mendalam.
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); }Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:
tutorial nodejs! !
Atas ialah kandungan terperinci Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!