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

スポンサーリンク

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

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

ハッシュのリストの 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は入門を超える内容で難しめです。
 
スポンサーリンク

Leave Your Message!