我有一个庞大的配置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文件中的所有地方使用引号来强制执行此操作。那么我该如何以简单明智的方式做到这一点呢?
答案 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