Hướng dẫn read write json file javascript - đọc ghi tệp json javascript

Mục tiêu

Giả sử bạn có tệp khách hàng được lưu vào đĩa giữ kỷ lục cho khách hàng trong cửa hàng của bạn.

Là một phần của ứng dụng cửa hàng của bạn, bạn muốn truy cập địa chỉ của khách hàng, sau đó cập nhật số lượng đơn đặt hàng sau khi đặt hàng.

Trong hướng dẫn này, chúng tôi sẽ xem xét cách đọc và ghi vào tệp khách hàng của chúng tôi.

{
  "name": "Mega Corp.",
  "order_count": 83,
  "address": "Infinity Loop Drive"
}

Điều kiện tiên quyết

  • None.

Xem: Đọc/Viết các tệp JSON

Tương tác với các tệp có FS

Truy cập các tệp trong nút được thực hiện với mô -đun gốc FS, cung cấp cho bạn các chức năng để xem, đọc và ghi các tệp cùng với nhiều công cụ khác để làm việc với hệ thống tệp. Bởi vì nó là một mô -đun gốc, chúng tôi có thể yêu cầu nó trong mã của chúng tôi mà không cần cài đặt nó. Chỉ cần gọi

const config = require("./config.json");
4.

Mô -đun

const config = require("./config.json");
5 cho chúng ta tùy chọn các phiên bản đồng bộ hoặc không đồng bộ của nhiều chức năng của nó. Phiên bản đồng bộ chặn thực thi mã khác cho đến khi chúng được truy cập vào hệ thống tập tin, đọc hoặc ghi dữ liệu. Một hàm Async sẽ chạy mà không chặn mã khác. Tìm hiểu thêm về hành vi đồng bộ/async.

Hành vi đồng bộ này có thể hữu ích ở một số nơi, như khi khởi động khi đọc tệp cấu hình trước khi bất kỳ mã nào khác được chạy, nhưng trở thành một vấn đề lớn khi được sử dụng trong máy chủ web nơi tất cả các yêu cầu đến sẽ bị chặn trong khi đọc tệp đồng bộ đang chạy. Vì lý do này, bạn thường muốn sử dụng các phiên bản ASYNC của các chức năng

const config = require("./config.json");
5 trong mã của bạn. Chúng tôi sẽ tập trung vào các hoạt động không đồng bộ, nhưng cũng sẽ hiển thị tương đương đồng bộ.

Để đọc và ghi các tệp không đồng bộ với

const config = require("./config.json");
5, chúng tôi sẽ sử dụng
const config = require("./config.json");
8 và
const config = require("./config.json");
9.

Chúng tôi cũng sẽ sử dụng Trình trợ giúp JSON toàn cầu để chuyển đổi các đối tượng thành chuỗi JSON và chuỗi JSON thành các đối tượng.

Đọc tệp JSON

Cách đơn giản nhất để đọc một tệp JSON là yêu cầu nó. Chuyển

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
0 với đường dẫn đến tệp JSON sẽ được đọc đồng bộ và phân tích dữ liệu vào một đối tượng JavaScript.

const config = require("./config.json");

Nhưng đọc các tệp JSON với yêu cầu có nhược điểm của nó. Tệp sẽ chỉ được đọc một lần; Yêu cầu nó một lần nữa trả về dữ liệu được lưu trong bộ nhớ cache từ lần đầu tiên yêu cầu được chạy. Điều này là tốt để tải dữ liệu tĩnh trên startup (như dữ liệu cấu hình). Nhưng để đọc một tệp thay đổi trên đĩa, như khách hàng của chúng tôi có thể, chúng tôi cần đọc tệp theo cách thủ công bằng cách sử dụng

const config = require("./config.json");
8 không đồng bộ.

Đọc một tệp với const config = require("./config.json"); 8

Để truy cập địa chỉ của khách hàng, chúng tôi cần:

  • Đọc dữ liệu JSON từ tệp
  • Phân tích chuỗi JSON vào một đối tượng JavaScript

Để tải dữ liệu từ tệp customer.json, chúng tôi sẽ sử dụng

const config = require("./config.json");
8, chuyển đường dẫn đến tệp của chúng tôi, loại mã hóa tùy chọn và gọi lại để nhận dữ liệu tệp.

Nếu tệp được đọc thành công, nội dung sẽ được chuyển đến cuộc gọi lại.

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
  • ./customer.json là đường dẫn tương đối đến tệp
    const fs = require("fs");
    fs.readFile("./customer.json", "utf8", (err, jsonString) => {
      if (err) {
        console.log("File read failed:", err);
        return;
      }
      console.log("File data:", jsonString);
    });
    
    4 là một tham số tùy chọn để mã hóa tệp chúng tôi đang đọc, điều này có thể bị bỏ lại. Nếu không được chỉ định, hàm sẽ trả về
    const fs = require("fs");
    fs.readFile("./customer.json", "utf8", (err, jsonString) => {
      if (err) {
        console.log("File read failed:", err);
        return;
      }
      console.log("File data:", jsonString);
    });
    
    5 thay vì
    const fs = require("fs");
    fs.readFile("./customer.json", "utf8", (err, jsonString) => {
      if (err) {
        console.log("File read failed:", err);
        return;
      }
      console.log("File data:", jsonString);
    });
    
    6.
  • const fs = require("fs");
    fs.readFile("./customer.json", "utf8", (err, jsonString) => {
      if (err) {
        console.log("File read failed:", err);
        return;
      }
      console.log("File data:", jsonString);
    });
    
    7 là chức năng gọi lại chạy sau khi tệp đã được đọc.

Bây giờ chúng ta có nội dung của tệp dưới dạng chuỗi JSON, nhưng chúng ta cần biến chuỗi thành một đối tượng.

Trước khi chúng ta có thể sử dụng dữ liệu từ cuộc gọi lại trong mã của mình, chúng ta phải biến nó thành một đối tượng.

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
8 lấy dữ liệu JSON làm đầu vào và trả về một đối tượng JavaScript mới. Nếu không, chúng ta sẽ chỉ có một chuỗi dữ liệu với các thuộc tính mà chúng ta có thể truy cập.

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
8 có thể ném các lỗi ngoại lệ và làm hỏng chương trình của chúng tôi nếu được thông qua chuỗi JSON không hợp lệ. Để ngăn chặn sự cố, chúng tôi quấn json.parse trong một câu lệnh thử để bắt một cách duyên dáng bất kỳ lỗi nào.

Ví dụ này hiển thị đọc và phân tích tệp JSON:

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});

Sử dụng

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
0 từ Reading customer.json, chúng tôi tạo một đối tượng và có thể truy cập thuộc tính địa chỉ. Nếu
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
8 ném lỗi, chúng tôi xử lý nó trong khối
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
2.

Bây giờ chúng tôi có một biểu diễn đối tượng của dữ liệu trong tệp khách hàng của chúng tôi!

Chúng ta cũng có thể đọc tệp đồng bộ bằng cách sử dụng

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
3. Thay vì nhận cuộc gọi lại,
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
4 trả về nội dung tệp sau khi đọc tệp.

try {
  // Note that jsonString will be a  since we did not specify an
  // encoding type for the file. But it'll still work because JSON.parse() will
  // use .toString().
  const jsonString = fs.readFileSync("./customer.json");
  const customer = JSON.parse(jsonString);
} catch (err) {
  console.log(err);
  return;
}
console.log(customer.address); // => "Infinity Loop Drive"

Chúng ta có thể sử dụng kiến ​​thức này để tạo chức năng trợ giúp có thể tái sử dụng để đọc và phân tích tệp JSON. Ở đây chúng tôi tạo một hàm gọi là

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
5 sẽ đọc và phân tích tệp JSON cho chúng tôi. Nó đưa đường dẫn đến tệp và một cuộc gọi lại để nhận đối tượng được phân tích cú pháp và bất kỳ lỗi nào. Nó sẽ bắt bất kỳ lỗi nào được ném bởi
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
8 cho chúng tôi.

const fs = require("fs");

function jsonReader(filePath, cb) {
  fs.readFile(filePath, (err, fileData) => {
    if (err) {
      return cb && cb(err);
    }
    try {
      const object = JSON.parse(fileData);
      return cb && cb(null, object);
    } catch (err) {
      return cb && cb(err);
    }
  });
}
jsonReader("./customer.json", (err, customer) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(customer.address); // => "Infinity Loop Drive"
});

Một lưu ý về mã hóa tệp

Cả

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
3 và
const config = require("./config.json");
8 đều có một đối số
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
9 tùy chọn. Nếu bạn chỉ định một mã hóa ký tự, bạn sẽ nhận được một
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
6. Nếu bạn không chỉ định một ký tự mã hóa cả hai chức năng sẽ trả về
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
5.

Điều này là do nút không và không thể, giả sử loại nội dung mà tệp chứa. Ngay cả khi bạn có thể. Để xử lý sự thiếu định nghĩa này, Node sẽ đọc byte tệp cho byte và trả về nó dưới dạng bộ đệm không được sử dụng mà bạn có thể xử lý như mong muốn.

Nếu bạn biết nội dung của tệp và có thể cung cấp chi tiết đó cho nút dưới dạng đối số

const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("Error reading file from disk:", err);
    return;
  }
  try {
    const customer = JSON.parse(jsonString);
    console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive"
  } catch (err) {
    console.log("Error parsing JSON string:", err);
  }
});
9, nó thường làm cho mã vừa hiệu suất hơn và dễ hiểu hơn.

Ghi vào một tệp với const config = require("./config.json"); 9

Viết JSON vào hệ thống tập tin tương tự như đọc nó. Chúng tôi sẽ sử dụng

const config = require("./config.json");
9 để ghi dữ liệu không đồng bộ vào tệp newcustomer.json.

Đầu tiên, để ghi dữ liệu vào tệp JSON, chúng ta phải tạo chuỗi JSON của dữ liệu với

try {
  // Note that jsonString will be a  since we did not specify an
  // encoding type for the file. But it'll still work because JSON.parse() will
  // use .toString().
  const jsonString = fs.readFileSync("./customer.json");
  const customer = JSON.parse(jsonString);
} catch (err) {
  console.log(err);
  return;
}
console.log(customer.address); // => "Infinity Loop Drive"
5. Điều này trả về một biểu diễn chuỗi JSON của một đối tượng JavaScript, có thể được ghi vào một tệp. Tương tự như phân tích dữ liệu vào một đối tượng khi đọc tệp, chúng ta phải biến dữ liệu của mình thành một chuỗi để có thể ghi nó vào một tệp.

Tạo một đối tượng khách hàng với dữ liệu của chúng tôi bên dưới và biến nó thành một chuỗi.

const customer = {
  name: "Newbie Corp.",
  order_count: 0,
  address: "Po Box City"
};
const jsonString = JSON.stringify(customer);
console.log(jsonString);
// => "{"name":"Newbie Co.","address":"Po Box City","order_count":0}"

Lưu ý: Nếu bạn cố gắng viết một đối tượng vào một tệp mà không cần chuỗi nó, tệp của bạn sẽ trống và trông như thế này:without stringifying it, your file will be empty and look like this:

[object, object]

Khi dữ liệu được xâu chuỗi, chúng tôi có thể sử dụng

const config = require("./config.json");
9 để tạo tệp khách hàng mới. Chúng tôi vượt qua
const config = require("./config.json");
9 FilePath, dữ liệu khách hàng của chúng tôi để viết và một cuộc gọi lại sẽ được trang trí sau khi tệp được viết. Nếu tệp newcustomer.json không tồn tại, nó sẽ được tạo; Nếu nó tồn tại, nó sẽ được ghi đè!

Dưới đây là một ví dụ về việc viết tệp JSON bằng const config = require("./config.json"); 9

const fs = require('fs')
const customer = {
    name: "Newbie Co.",
    order_count: 0,
    address: "Po Box City",
}
const jsonString = JSON.stringify(customer)fs.writeFile('./newCustomer.json', jsonString, err => {
    if (err) {
        console.log('Error writing file', err)
    } else {
        console.log('Successfully wrote file')
    }
})

Và đó là nó! Khi cuộc gọi lại chạy, tệp đã được ghi vào đĩa. Lưu ý: Chúng tôi chỉ được thông qua một đối tượng lỗi; Các tệp mà chúng tôi đã viết là không được chuyển cho cuộc gọi lại. Chúng ta cũng có thể viết một tệp đồng bộ theo cùng một cách bằng cách sử dụng

try {
  // Note that jsonString will be a  since we did not specify an
  // encoding type for the file. But it'll still work because JSON.parse() will
  // use .toString().
  const jsonString = fs.readFileSync("./customer.json");
  const customer = JSON.parse(jsonString);
} catch (err) {
  console.log(err);
  return;
}
console.log(customer.address); // => "Infinity Loop Drive"
9:

const jsonString = JSON.stringify(customer)fs.writeFileSync('./newCustomer.json', jsonString)

Sau khi tập tin của bạn được viết xong, nó sẽ trông giống như thế này:

const config = require("./config.json");
0

Chuỗi theo mặc định đặt tất cả dữ liệu của bạn trên một dòng. Tùy chọn, bạn có thể làm cho tệp đầu ra có thể đọc được bằng cách chuyển số lượng khoảng trống để thụt vào bằng

try {
  // Note that jsonString will be a  since we did not specify an
  // encoding type for the file. But it'll still work because JSON.parse() will
  // use .toString().
  const jsonString = fs.readFileSync("./customer.json");
  const customer = JSON.parse(jsonString);
} catch (err) {
  console.log(err);
  return;
}
console.log(customer.address); // => "Infinity Loop Drive"
5:

const config = require("./config.json");
1

Ở trên, chúng tôi đã nói với Stringify để thụt dòng dữ liệu với 2 khoảng trống. Bây giờ tệp đầu ra của bạn sẽ trông như thế này:

const config = require("./config.json");
2

Cập nhật tệp JSON

Bây giờ chúng tôi có thể đọc và viết các tệp khách hàng của mình, chúng tôi có thể sử dụng chúng như một loại cơ sở dữ liệu đơn giản. Nếu chúng tôi muốn cập nhật dữ liệu trong tệp JSON, chúng tôi có thể đọc nội dung, thay đổi dữ liệu và sau đó viết dữ liệu mới trở lại tệp:

const config = require("./config.json");
3

Chắc chắn không phải là cơ sở dữ liệu hiệu quả nhất mà bạn có thể chọn, nhưng làm việc với các tệp JSON như thế này là một cách đơn giản để tồn tại dữ liệu trong dự án của bạn.

Tóm tắt lại

JSON là một trong những loại dữ liệu phổ biến nhất mà bạn sẽ làm việc trong Node và việc có thể đọc và viết các tệp JSON là rất hữu ích. Bạn đã học cách sử dụng

const config = require("./config.json");
8 và
const config = require("./config.json");
9 để làm việc không đồng bộ với hệ thống tập tin, cũng như cách phân tích dữ liệu đến và từ định dạng JSON và bắt lỗi từ
const fs = require("fs");
fs.readFile("./customer.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
});
8.

Bạn có thể sử dụng yêu cầu đọc tệp JSON khi khởi động để phân tích đồng bộ tệp JSON trong một dòng. Và bây giờ bạn có thể sử dụng tệp JSON đơn giản như một cửa hàng dữ liệu.

Nếu bạn muốn tìm hiểu thêm, bạn có thể đọc lên JSON thực sự là gì và tìm hiểu thêm về mã không đồng bộ đồng bộ.

Hơn nữa sự hiểu biết của bạn

  • Tìm hiểu về việc sử dụng các luồng Node.js để đọc các tệp thực sự lớn.
  • Đi qua ví dụ này với một đồng nghiệp. Có phải tất cả các khái niệm rõ ràng với bạn? Bạn có cần xem lại bất cứ điều gì?

Tài nguyên bổ sung

  • Hệ thống tệp (Tài liệu Node V12.5.0) (NodeJs.org)

Làm thế nào để bạn đọc và ghi vào tệp json trong javascript?

Nhiệm vụ này sẽ được hoàn thành trong ba bước:..
Đọc tệp bằng một trong các phương thức trên ..
Thêm dữ liệu bằng cách sử dụng. phương pháp đẩy () ..
Viết dữ liệu mới vào tệp bằng JSON. Phương thức chuỗi () để chuyển đổi dữ liệu thành chuỗi ..

Làm cách nào để mở tệp JSON trong JavaScript?

Ví dụ 1: Để hiển thị dữ liệu trong bảng điều khiển.Đầu tiên tạo một tệp JSON với trên mạng.Tiện ích mở rộng của JSON, ở đây chúng tôi đã đặt tên nó là tải ...
Tạo tệp JSON, thêm dữ liệu vào tệp JSON đó ..
Sử dụng JavaScript tìm nạp tệp JSON đã tạo bằng phương thức Fetch () ..
Hiển thị dữ liệu trên bảng điều khiển hoặc trong cửa sổ ..

Làm cách nào để viết một đối tượng JSON vào một tệp trong Node JS?

Để viết một đối tượng JSON vào một tệp cục bộ, sau đây là hướng dẫn từng bước:..
Chuỗi đối tượng JSON.Usejson.Stringify (jsonObject) để chuyển đổi đối tượng JSON sang chuỗi JSON ..
Viết đối tượng Stringified vào tệp bằng FS.Chức năng WriteFile () của mô -đun Node FS ..

Làm cách nào để đọc tệp JSON?

Công cụ Windows để mở tệp JSON..
Notepad..
Notepad++.
Microsoft Notepad ..
Microsoft WordPad ..
Mozilla Firefox..
Trình xem tệp cộng ..
Altova xmlspy ..