0
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?

YAML ↔ JSON 変換ツール(YAML サブセットパーサを自作)

0
Posted at

作ったもの

YAML JSONhttps://sen.ltd/portfolio/yaml-json/

スクリーンショット

  • YAML → JSON、JSON → YAML
  • 自作 YAML サブセットパーサ
  • ライブ双方向変換
  • エラー表示(行番号付き)
  • 4 サンプル(K8s / GitHub Actions / config / ネスト)

vanilla JS、ゼロ依存、ビルド不要node --test で 74 ケース。

YAML 1.2 の全仕様はデカい

YAML 仕様は JSON より大きく、XML より大きい。だが実運用で見る YAML の 90% は小さなサブセット: マップ、リスト、クォート文字列、ブロックスカラー、コメント。これだけなら 300 行で書ける。

Norway 問題

country: NO

これは YAML 1.1 で false にパースされる(no = boolean)。ノルウェーの国コード NO を書くと country = false になるバグが有名。回避策は明示的クォート:

country: "NO"

パーサは 1.1 互換で yes/no/on/off を真偽値として扱う。ユーザがクォートしない限り、国コードは false になる。仕様通りだが実用上は罠。

インデントベースのパース

YAML は構造をインデントで表現する。再帰パーサで「現在のインデントレベル」を追跡し、子行を集める。キーの値が空ならネストブロック、非空ならスカラー。

ブロックスカラー |>

desc: |
  複数行
  改行保持

summary: >
  複数行
  だが改行はスペース

末尾の | / > を検出して、インデントされた行をデデントまで読み続ける。chomping 修飾子 (|-, |+) は削除/保持を指定。

シリーズ

100+ 公開ポートフォリオ シリーズの #94 です。

0
1
0

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
0
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?