如何强制yaml中的所有节点都是字符串

时间:2011-08-29 12:56:11

标签: ruby-on-rails ruby yaml

我有一个庞大的配置yaml文件,其中所有节点都应该作为字符串读取。一个例子:

model_names:
  Audi:
    A4:
      - A4
      - A 4
  Fiat:
    500:
      - 500  

我在rails中加载文件:

catalogue = File.read("#{Rails.root}/config/cars_catalogue.yml")
CARS_CATALOGUE = YAML.load(catalogue)

我的问题是,如果我要求:

CARS_CATALOGUE['model_names']['Fiat']['500']

它返回nil,因为它认为500:是一个fixnum - 但是所有节点都应该总是字符串 - 而且我不想在yaml文件中的所有地方使用引号来强制执行此操作。那么我该如何以简单明智的方式做到这一点呢?

3 个答案:

答案 0 :(得分:5)

你可以重新生成文件吗?如果是,那么只需在数字中添加引号:

model_names:
  Audi:
    A4:
      - A4
      - A 4
  Fiat:
    "500":
      - 500

应该这样做。

答案 1 :(得分:2)

stringify_keys应将所有键转换为字符串

catalogue = File.read("#{Rails.root}/config/cars_catalogue.yml")
CARS_CATALOGUE = YAML.load(catalogue).stringify_keys

最好使用YAML.load(catalogue).symbolize_keys将所有键转换为符号

答案 2 :(得分:1)

Rails目前有一个递归键字符串函数; check it