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

Giới thiệu

Trong vài năm qua, YAML, viết tắt của YAML không phải là ngôn ngữ đánh dấu, đã trở nên rất phổ biến để sử dụng trong việc lưu trữ dữ liệu theo cách mạng, thường là các tệp cấu hình. Vì YAML về cơ bản là một định dạng dữ liệu, đặc tả YAML, khá ngắn gọn. Do đó, chức năng duy nhất cần thiết của các thư viện YAML là khả năng phân tích hoặc tạo các tệp có định dạng YAML.

Trong bài viết này, chúng tôi sẽ xem cách bạn có thể sử dụng YAML với ứng dụng Node.js. Chúng tôi sẽ bắt đầu bằng cách xem cách dữ liệu được lưu trữ trong tệp YAML, theo sau là tải dữ liệu đó vào một đối tượng JavaScript. Cuối cùng, chúng ta sẽ học cách lưu trữ một đối tượng JavaScript trong tệp YAML.

Có một vài thư viện nút phổ biến được sử dụng để phân tích cú pháp và tạo yaml: yaml và js-yaml.

$ node
> const yaml = require('js-yaml')
>
5 là phổ biến hơn trong hai thư viện, vì vậy đó là những gì chúng tôi sẽ tập trung vào bài viết này.

Trước khi chúng tôi tiến xa hơn, có một vài điều kiện tiên quyết cho hướng dẫn này. Bạn nên có một sự hiểu biết cơ bản về cú pháp của JavaScript, cụ thể là thời gian chạy Node.js. Bạn cũng sẽ muốn cài đặt Node.js và NPM trên hệ thống của bạn để theo dõi. Ngoài ra, hướng dẫn khá đơn giản và dễ theo dõi cho người mới bắt đầu.

Cài đặt

Như với bất kỳ gói nút nào, các cài đặt khá đơn giản khi sử dụng NPM:

$ npm install js-yaml

Chỉ cần chắc chắn sử dụng các cờ chính xác để lưu phụ thuộc trong tệp pack.json của bạn. Ví dụ: nếu

$ node
> const yaml = require('js-yaml')
>
5 chỉ được sử dụng cho mục đích phát triển, thì hãy sử dụng
$ node
> const yaml = require('js-yaml')
>
7, nếu không hãy sử dụng
$ node
> const yaml = require('js-yaml')
>
8 nếu nó được sử dụng trong môi trường sản xuất ứng dụng của bạn.

Bạn có thể xác minh rằng nó được cài đặt chính xác bằng cách mở bản phát từ cùng một thư mục và nhập gói với các mục sau:

$ node
> const yaml = require('js-yaml')
>

Thư viện

$ node
> const yaml = require('js-yaml')
>
5 cũng hỗ trợ việc sử dụng CLI, cho phép bạn kiểm tra các tệp YAML từ dòng lệnh. Bạn có thể kích hoạt điều này bằng cách cài đặt gói trên toàn cầu:

$ npm install -g js-yaml

Đọc các tệp yaml trong node.js

Chúng tôi sẽ bắt đầu bằng cách đọc một tệp có định dạng YAML và phân tích nó vào đối tượng JS. Vì lợi ích của hướng dẫn này, giả sử chúng tôi có một tệp,

$ npm install -g js-yaml
0, có nội dung sau:

--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development

Để đọc và phân tích tệp này, chúng tôi sẽ sử dụng phương thức

$ npm install -g js-yaml
1:

// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}

Chạy mã này sẽ xuất ra như sau:

$ node read.js
{ title: 'Reading and Writing YAML to a File in Node.js/JavaScript',
  'url path': '/reading-and-writing-yaml-to-a-file-in-node-js-javascript',
  domain: 'stackabuse.com',
  port: 443,
  'is-https': true,
  meta:
   { 'published-at': 'Nov. 1st, 2019',
     author: { name: 'Scott Robinson', contact: '[email protected]' },
     tags: [ 'javascript', 'node.js', 'web development' ] } }

Bạn có thể thấy rằng dữ liệu trong tệp YAML hiện được chuyển đổi thành các chữ và đối tượng JS trong cùng cấu trúc với tệp.

Phương pháp

$ npm install -g js-yaml
1 được khuyến nghị để phân tích nội dung YAML vì nó an toàn cho dữ liệu không tin cậy. Một hạn chế đáng chú ý là phương pháp này không hỗ trợ các nguồn đa tài liệu. Nếu bạn quen thuộc với YAML, bạn sẽ biết rằng YAML có thể chứa nhiều "tài liệu" trong một tệp, được phân tách bằng cú pháp
$ npm install -g js-yaml
3. Ví dụ:

--- # Programming language
  language: "JavaScript"
  created-at: "December 4, 1995"
  domain: "stackabuse.com"
  creator: "Brendan Eich"
--- # Website
  domain: "wikipedia.org"
  created-at: "January 15, 2001"
  num-languages: 304
  num-articles: 51360771
  creator:
    - Jimmy Wales
    - Larry Sanger

Đang tải tệp này với

$ npm install -g js-yaml
1 sẽ ném một ngoại lệ. Thay vào đó, bạn nên sử dụng phương thức
$ npm install -g js-yaml
5, như vậy:

// read-all.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data-multi.yaml', 'utf8');
    let data = yaml.safeLoadAll(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}

Điều này dẫn đến một loạt các tài liệu YAML phân tích cú pháp:

$ node read-all.js
[ { language: 'JavaScript',
    'created-at': 'December 4, 1995',
    domain: 'stackabuse.com',
    creator: 'Brendan Eich' },
  { domain: 'wikipedia.org',
    'created-at': 'January 15, 2001',
    'num-languages': 304,
    'num-articles': 51360771,
    creator: [ 'Jimmy Wales', 'Larry Sanger' ] } ]

Một phương pháp khác đáng được đề cập là phương pháp

$ npm install -g js-yaml
6, rất giống với
$ npm install -g js-yaml
1, ngoại trừ việc nó hỗ trợ tất cả các loại lược đồ YAML. Các loại được hỗ trợ bổ sung dành riêng cho JavaScript (
$ npm install -g js-yaml
8,
$ npm install -g js-yaml
9 và
--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
0) và bạn phải hoàn toàn tin tưởng dữ liệu trong các tệp YAML này vì nó có thể tải mã không đáng tin cậy.

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Ví dụ, một hàm có thể được xác định trong YAML như sau:

'toString': ! function() {console.log('Malicious code execuited!');}

Thẻ đó cho thư viện YAML của chúng tôi phân tích nó là một hàm, sau đó có thể được thực thi sau. Như đã chỉ ra trong tài liệu, một phương pháp phổ biến được thực thi trên các đối tượng JS là

--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
1, mà chúng ta có thể khai thác như thế này:

$ node
> const yaml = require('js-yaml')
>
0

Và chạy mã này cho thấy phương thức

--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
2 thực sự được thực thi:

$ node
> const yaml = require('js-yaml')
>
1

Viết YAML vào các tệp trong Node.js

Bây giờ bạn đã biết cách đọc các tệp yaml với node.js, hãy xem cách chúng ta có thể viết các đối tượng/dữ liệu JavaScript vào tệp yaml.

Trong ví dụ này, chúng tôi sẽ sử dụng đối tượng JS sau đây mà bạn có thể nhận ra từ các ví dụ trước:

$ node
> const yaml = require('js-yaml')
>
2

Để tuần tự hóa đối tượng này và lưu nó vào tệp được định dạng YAML, chúng tôi sẽ sử dụng phương thức

--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
3, một lần nữa sử dụng ________ 15 của
--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
5:

$ node
> const yaml = require('js-yaml')
>
3

Thực hiện mã này sẽ ghi ra một tệp yaml trông như thế này:

$ node
> const yaml = require('js-yaml')
>
4

Đầu ra này gần như giống hệt với YAML ban đầu mà chúng tôi đã đọc trước đó trong bài viết, ngoại trừ việc phân tách tài liệu (

$ npm install -g js-yaml
3) không được bao gồm.

Loại dữ liệu

Điều quan trọng cần lưu ý là không phải tất cả các loại dữ liệu JavaScript có thể được tuần tự hóa trực tiếp thành YAML và ngược lại. Trong một số trường hợp, loại dữ liệu gần nhất sẽ được sử dụng khi có thể nếu nó không được hỗ trợ trực tiếp. Ví dụ, loại YAML

--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
7 sẽ được phân tích cú pháp như một mảng JavaScript.

Theo tài liệu JS-YAML, các loại dữ liệu sau đây được hỗ trợ:

Loại yamlThí dụLoại JS
!!vô giá trị
--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
8
vô giá trị
!! bool
--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "stackabuse.com"
port: 443
is-https: true
meta:
  published-at: "Nov. 1st, 2019"
  author:
    name: "Scott Robinson"
    contact: "[email protected]"
  tags:
    - javascript
    - node.js
    - web development
9
bool
!! int
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
0
con số
!!trôi nổi
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
1
con số
!!trôi nổi
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
1
!! nhị phân
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
2
đệm !! dấu thời gian
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
3
ngày !! omap
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
4
ngày !! omap
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
4
Mảng các cặp giá trị khóa !!cặp
các cặp mảng hoặc mảng !!bộ
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
6
Mảng các đối tượng có các khóa và giá trị null đã cho ngày !! omap
// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
4
Mảng các cặp giá trị khóa !!cặp

các cặp mảng hoặc mảng

!!bộ

// read.js
const fs = require('fs');
const yaml = require('js-yaml');

try {
    let fileContents = fs.readFileSync('./data.yaml', 'utf8');
    let data = yaml.safeLoad(fileContents);

    console.log(data);
} catch (e) {
    console.log(e);
}
6

Mảng các đối tượng có các khóa và giá trị null đã cho