2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DenoAdvent Calendar 2019

Day 25

Deno で YAML を扱う

Last updated at Posted at 2019-12-24

Deno (ディーノ) Advent Calendar 25日目の記事です.

今日は Deno で YAML を扱う話です.

YAML モジュール

Deno は標準ライブラリで YAML モジュールを持っています. parse, stringify などの API を使って YAML のパースやシリアライズを行うことが出来ます.

import { parse, stringify } from "https://deno.land/std/encoding/yaml.ts";

const data = parse(`
foo: bar
baz:
  - qux
  - quux
`);
console.log(data);
// => { foo: "bar", baz: [ "qux", "quux" ] }

const yaml = stringify({ foo: "bar", baz: ["qux", "quux"] });
console.log(yaml);
// =>
// foo: bar
// baz:
//   - qux
//   - quux

parse は引数に YAML 文字列を受け取って, パースしたオブジェクトを返します.

stringify は逆にオブジェクトを受け取って, YAML 文字列を返します.

YAML は JSON とは違って, 1ファイルに複数のドキュメントを持つことが出来ます. 1ファイルに複数の YAML ドキュメントを記述するには各ドキュメントを --- という行で区切ります.

id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve

上の例は3つのドキュメントを持った YAML の例です.

parse 関数はこのような複数ドキュメントを持った YAML 文字列をパースすることはできません. 複数ドキュメントの YAML をパースしたい場合は parseAll というメソッドを使うことが出来ます.

import { parseAll } from "https://deno.land/std/encoding/yaml.ts";

const data = parseAll(`
---
id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve
`);
console.log(data);
// => [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" } ]

3つのドキュメントを持った YAML が 3つのオブジェクトを持った配列にパースされたことが分かります.

YAML モジュールの歴史

YAML モジュールは js-yaml という npm で一番よく使われている YAML ライブラリがベースになっています. YAML モジュールの最初の移植作業はフランスの Deno meetup である Paris Deno のオーガナイザの Lilian Saget-Lethias ( @bios21 ) さんによって行われました.

まとめ

今日は Deno で YAML を扱う方法を紹介しました.

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?