kinjouj.github.io

RubyでYAMLをロードする際にキーをSymbolにする方法

2025-05-15T09:00:00+09:00 Ruby

※古いRubyのバージョンで動くかは不明

RubyでYAMLのデータをロードする際にキーをStringじゃなくてSymbolにしてほしい場合はsymbolize_namesを設定すればいいっぽい(デフォルトはfalseな模様)

require "psych"

data =<<EOS
a: A
date: 2000-01-01 00:00:00
persons:
  - name: a
    age: 21
EOS

#a = Psych.load(data, permitted_classes: [Time])
a = Psych.load(data, permitted_classes: [Time], symbolize_names: true)
p a

実行すると以下のような結果が得られる

{
    a: "A",
    date: 2000-01-01 09:00:00 +0900,
    persons: [
        {name: "a", age: 21}
    ]
}

※見やすいように整形してます

YAMLじゃなくてPsychでやってるのはPsych4.0からYAML.loadが非推奨になるだのどーたらこーたら言われてるのを見たので(ry

余談

RailsとかにはActiveSupport?symbolize_keysとかいうのがあるらしい(未検証)