Ruby の YAML.load で yaml 形式の文字列 → オブジェクト変換時のエラー

Ruby で YAML.load を使って yaml 形式の文字列から Ruby オブジェクトに変換しようとして、いくつかエラーが出て少しはまったので備忘録です。

スポンサーリンク

ハッシュのリストの yaml

次のようなハッシュのリストの YAML データ操作時のことです。以下は valid な yaml なので、正常に YAML.load できます。

実際には YAML データを Ruby の文字列の変数としての処理で、以下のような YAML 形式の文字列データを処理していました。ダブルクォートの中で \n とスペースで yaml データを表現しようとするので見辛いです。はまる原因になりやすい。

これは正常な yaml の形式になっているので、YAML.load で正常に Ruby のオブジェクトに変換できます。

ハッシュの配列に変換できた。

Psych::SyntaxError: (): did not find expected key

はまった事例1です。次の文字列のケース。

この文字列は、YAML.load させると以下のようにエラー。

実はこの文字列は yaml データとしては invalid な形式になっていまして、以下のように3行目のスペースが1つ足りないのが原因です。

Psych::SyntaxError: (): could not find expected ‘:’

次はこのデータ。

今度は、以下のように could not find expected ‘:’ のエラーが出ました。

このパターンでは、以下のように3行目のコロンの後にスペースが開いていないのが原因です。

Psych::SyntaxError: (): mapping values are not allowed in this context

最後に次のパターンの文字列。

今度は、 mapping values are not allowed のエラー。

実は、4行目 first の後ろのコロンの後にスペースが開いていないのが原因です。

ということで、YAML.load での操作時に上記のようなエラーに遭遇しました。文字列で YAML データを操作する際は、特に注意したい。

スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!