Hướng dẫn import json file nodejs - nhập tệp json nodejs

Các mô -đun ES vẫn còn mới trong Node.js Land (chúng ổn định kể từ Node 14). Các mô-đun đi kèm với một hệ thống mô-đun tích hợp và các tính năng như cấp cao đang chờ đợi.

Tôi đã đọc một bài đăng thông tin trên các mô -đun ES của Pawel Grzybek và biết rằng bạn không thể nhập các tệp JSON trong các mô -đun ES ngay hôm nay. Đó là một yếu tố thực sự vì tôi khá quen với việc thực hiện các cuộc gọi require như

import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
0 trong node.js.

Bài đăng này giải thích các cách để đối phó với

import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
1 trong các mô -đun ES nếu bạn đang sử dụng phiên bản Node.js trước
import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
2 hoặc không muốn sử dụng
import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
3 trong Node.js
import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
4.

Tùy chọn 1: Tự đọc và phân tích các tệp JSON

Tài liệu Node.js khuyên nên sử dụng mô -đun

import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
5 và thực hiện công việc đọc các tệp và phân tích cú pháp.

import { readFile } from 'fs/promises';
const json = JSON.parse(
  await readFile(
    new URL('./some-file.json', import.meta.url)
  )
);

Tùy chọn 2: Tận dụng chức năng CommonJS require để tải các tệp JSON

Tài liệu cũng nói rằng bạn có thể sử dụng

import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
7 để tải các tệp JSON. Cách tiếp cận này là cách Pawel khuyên trong bài viết trên blog của mình.

import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
7 cho phép bạn xây dựng chức năng CommonJS require để sử dụng các tính năng phổ biến điển hình như đọc JSON trong các mô -đun ECMAscript Node.JS của bạn.

import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");

Bạn nên tải các tệp JSON như thế nào?

Đối với tương lai, các xác nhận nhập khẩu và các mô -đun ESM JSON là cách!import assertions and ESM JSON modules are the way!

Đối với các phiên bản Node.js chưa hỗ trợ họ, tôi không biết. Không có tùy chọn nào cảm thấy tốt, nhưng có lẽ tôi sẽ bám vào tùy chọn đầu tiên vì nó dễ hiểu hơn.

Nội dung bài viết

Video học lập trình mỗi ngày

JSON NodeJS(JavaScript Object Notation) được sử dụng rộng rãi trong việc chia sẻ dữ liệu với nhiều ngôn ngữ khác nhau. Nhờ tính đồng nhất và đơn giản dữ liệu, do đó trong các ứng dụng Nodejs cũng được thường xuyên sử dụng. Trong bài viết này, tipjs sẽ hướng dẫn cách đọc file và ghi file JSON trong Nodejs. Cung cấp cho bạn nhiều cách nhằm có thể ở hoàn cảnh nào chúng ta cũng có thể xử lý được fileJSON.  (JavaScript Object Notation) được sử dụng rộng rãi trong việc chia sẻ dữ liệu với nhiều ngôn ngữ khác nhau. Nhờ tính đồng nhất và đơn giản dữ liệu, do đó trong các ứng dụng Nodejs cũng được thường xuyên sử dụng. Trong bài viết này, tipjs sẽ hướng dẫn cách đọc file và ghi file JSON trong Nodejs. Cung cấp cho bạn nhiều cách nhằm có thể ở hoàn cảnh nào chúng ta cũng có thể xử lý được fileJSON. 

Giả sử chúng ta có một file databases.json sẵn có dữ liệudatabases.json sẵn có dữ liệu

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]

Giờ chúng ta sẽ có bao nhiêu cách để đọc file này?

Read a JSON file using fs.readFile()

Sử dụng

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
0 để đọc file này, nhưng chú ý đây là cách đọc file không đồng bộ. Cho nên nếu bạn muốn xử lý data thì nên xử lý trong function của nó luôn, hay có thể gọi callback cũng được.

const fs = require('fs');

fs.readFile('./databases.json', 'utf8', (err, data) => {

    if (err) {
        console.log(`Error reading file from disk: ${err}`);
    } else {

        // parse JSON string to JSON object
        const databases = JSON.parse(data);

        // print all databases
        databases.forEach(db => {
            console.log(`${db.name}: ${db.type}`);
        });
    }

});

Sử dụng

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
1 để phân tích cú pháp nó thành một đối tượng JSON sau đó dùng loop trong JavaScript, và có kết quả như thế này

MySQL: RDBMS
MongoDB: NoSQL
Neo4j: Graph DB

Bạn nào thường xuyên sử dụng promise cũng là một các viết chuẩn xác hơn.

Read a JSON file using fs.readFileSync()

Nếu bạn muốn đọc file một cách đồng bộ thì đây, giới thiệu cho các anh chị phương pháp đó là sử dụng

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
2. Thay vì gọi hàm callback thì có thể sử dụng
[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
2 như dưới đây, để xử lý data.

const fs = require('fs');

try {

    const data = fs.readFileSync('./databases.json', 'utf8');

    // parse JSON string to JSON object
    const databases = JSON.parse(data);

    // print all databases
    databases.forEach(db => {
        console.log(`${db.name}: ${db.type}`);
    });

} catch (err) {
    console.log(`Error reading file from disk: ${err}`);
}

Chú ý: Mặc dù

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
2 cú pháp rõ ràng, bạn không nên sử dụng để đọc các tệp lớn vì nó liên quan đến vòng lặp sự kiện (Event loop) cũng như ảnh hưởng đến hiệu suất.

Reading a JSON file with require()

Cách cuối cùng mà chúng ta đang nói đến để đọc tệp JSON là sử dụng

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
5. Tất cả những gì bạn cần làm là chuyển đường dẫn tệp JSON đến phương thức
[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
5 và nó sẽ đồng bộ đọc và phân tích cú pháp tệp JSON và trả về một đối tượng JSON đã sẵn sàng để sử dụng:

const databases = require('./databases.json');

// print all databases
databases.forEach(db => {
    console.log(`${db.name}: ${db.type}`);
});

Nhìn vào thì thấy

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
5 hoạt động trống giống
[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
2 vì nó làm việc đồng bộ. Với 3 cách đọc file JSON trong JavaScript thì chúng ta đi sang cách viết một file JSON như thế nào?

Writing to a JSON file

Cũng giống như

[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
0 và
[
    {
        "name": "MySQL",
        "type": "RDBMS"
    },
    {
        "name": "MongoDB",
        "type": "NoSQL"
    },
    {
        "name": "Neo4j",
        "type": "Graph DB"
    }
]
2 thì module fs cũng có hai phương thức để đọc file JSON đó là
const fs = require('fs');

fs.readFile('./databases.json', 'utf8', (err, data) => {

    if (err) {
        console.log(`Error reading file from disk: ${err}`);
    } else {

        // parse JSON string to JSON object
        const databases = JSON.parse(data);

        // print all databases
        databases.forEach(db => {
            console.log(`${db.name}: ${db.type}`);
        });
    }

});
1 và fs.writeFileSync(). Nhìn vào tên file cũng hiểu rồi, khi nào muốn ghi đồng bộ thì sử dụng fs.writeFileSync() và ngược lại
const fs = require('fs');

fs.readFile('./databases.json', 'utf8', (err, data) => {

    if (err) {
        console.log(`Error reading file from disk: ${err}`);
    } else {

        // parse JSON string to JSON object
        const databases = JSON.parse(data);

        // print all databases
        databases.forEach(db => {
            console.log(`${db.name}: ${db.type}`);
        });
    }

});
1.

Write to a JSON file using fs.writeFile()

Để ghi file JSON thì thử cách

const fs = require('fs');

fs.readFile('./databases.json', 'utf8', (err, data) => {

    if (err) {
        console.log(`Error reading file from disk: ${err}`);
    } else {

        // parse JSON string to JSON object
        const databases = JSON.parse(data);

        // print all databases
        databases.forEach(db => {
            console.log(`${db.name}: ${db.type}`);
        });
    }

});
1 xem code dưới. Và đương nhiên chúng ta trả về trạng thái trong callback function.

const fs = require('fs');

let user = {
    name: 'Anonystick',
    emai: '',
    age: 37,
    gender: 'Male',
    profession: 'Software Developer'
};

// convert JSON object to a string
const data = JSON.stringify(user);

// write file to disk
fs.writeFile('./user.json', data, 'utf8', (err) => {

    if (err) {
        console.log(`Error writing file: ${err}`);
    } else {
        console.log(`File is written successfully!`);
    }

});

File json được save lại dưới tên là user.json và muốn đọc được thì dùng JSON.stringify() nhé các bro!user.json và muốn đọc được thì dùng JSON.stringify() nhé các bro!

Write to a JSON file using fs.writeFileSync()

Cách cuối cùng để ghi file JSON đó là

const fs = require('fs');

fs.readFile('./databases.json', 'utf8', (err, data) => {

    if (err) {
        console.log(`Error reading file from disk: ${err}`);
    } else {

        // parse JSON string to JSON object
        const databases = JSON.parse(data);

        // print all databases
        databases.forEach(db => {
            console.log(`${db.name}: ${db.type}`);
        });
    }

});
4, chạy một cách đồng bộ.

const fs = require('fs');

let user = {
    name: 'Anonystick',
    emai: '',
    age: 37,
    gender: 'Male',
    profession: 'Software Developer'
};

try {

    // convert JSON object to a string
    const data = JSON.stringify(user, null, 4);

    // write file to disk
    fs.writeFileSync('./user.json', data, 'utf8');

    console.log(`File is written successfully!`);

} catch (err) {
    console.log(`Error writing file: ${err}`);
}

Kết qủa cũng tương tự nhưng có vẻ như việc xử lý từng bước có thể ngắn gọn và hay hơn. 

Khuyến khích sử dụng và học về cách lập trình đồng bộ. HếtTham khảo thêm: attacomsian
Tham khảo thêm: attacomsian