Read and write JSON files in Node.js

Nội dung bài viết

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. 

Giả sử chúng ta có một file databases.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 fs.readFile() để đọ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 JSON.parse() để 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 fs.readFileSync(). Thay vì gọi hàm callback thì có thể sử dụng fs.readFileSync() 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ù fs.readFileSync() 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 require(). 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 require() 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 require() hoạt động trống giống fs.readFileSync() 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ư fs.readFile()fs.readFileSync() thì module fs cũng có hai phương thức để đọc file JSON đó là fs.writeFile() 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 fs.writeFile().


Write to a JSON file using fs.writeFile()


Để ghi file JSON thì thử cách fs.writeFile() 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: 'anonystick@gmail.com',
    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!


Write to a JSON file using fs.writeFileSync()


Cách cuối cùng để ghi file JSON đó là fs.writeFileSync(), chạy một cách đồng bộ.

const fs = require('fs');

let user = {
    name: 'Anonystick',
    emai: 'anonystick@gmail.com',
    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ết
Tham khảo thêm: attacomsian

Có thể bạn đã bị missing