模組 Psych::Nodes

概觀

使用 Psych.loadYAML 文件進行反序列化時,文件會轉換成中間 AST。然後,中間 AST 會轉換成 Ruby 物件圖形。

相反地,使用 Psych.dump 時,Ruby 物件圖形會轉換成中間 AST,然後轉換成 YAML 文件。

Psych::Nodes 包含構成 YAML AST 節點的所有類別。您可以手動建立 AST,並使用其中一個訪客(請參閱 Psych::Visitors)將該 AST 轉換成 YAML 文件或 Ruby 物件圖形。

以下是建立表示清單(包含一個純量)的 AST 範例

# Create our nodes
stream = Psych::Nodes::Stream.new
doc    = Psych::Nodes::Document.new
seq    = Psych::Nodes::Sequence.new
scalar = Psych::Nodes::Scalar.new('foo')

# Build up our tree
stream.children << doc
doc.children    << seq
seq.children    << scalar

串流是樹狀結構的根。然後,我們可以將樹狀結構轉換成 YAML

stream.to_yaml => "---\n- foo\n"

或轉換成 Ruby

stream.to_ruby => [["foo"]]

YAML AST 需求

有效的 YAML AST 必須在根部有一個 Psych::Nodes::Stream。一個 Psych::Nodes::Stream 節點必須有 1 個或多個 Psych::Nodes::Document 節點作為子節點。

Psych::Nodes::Document 節點必須有一個且僅有一個子節點。該子節點可能是下列之一

Psych::Nodes::SequencePsych::Nodes::Mapping 節點可能有多個子節點,但 Psych::Nodes::Mapping 節點應有偶數個子節點。

以下都是 Psych::Nodes::SequencePsych::Nodes::Mapping 節點的有效子節點

Psych::Nodes::ScalarPsych::Nodes::Alias 都是終端節點,不應有任何子節點。