Din*_*tih 3 ruby mapping zipcode yaml
我想从 yaml (PHPMyAdmin) 中的 Mysql 转储中获取数据,但数据没有用引号括起来。
我有可以从 0 开始的邮政编码,解析后我得到八进制值的十进制版本,而不是简单的字符串。
我该如何强制 Yaml 解析器不进行自动映射,或者只是获取所有数据,因为它们是字符串?
谢谢
== 更新 ==
2185:
id: 3274
civility: Mr
address: CROIX DES COMBES
zipcode: 04270
Run Code Online (Sandbox Code Playgroud)
如果您的邮政编码值是字符串,它们可能应该在数据库中,并且它们被正确转换为 YAML,那么它们将被 Ruby 的 YAML 解析器重新转换回字符串:
require 'yaml'
zip = '01234'
Run Code Online (Sandbox Code Playgroud)
如果我们将其视为字符串,则它会正确转换。
zip.to_yaml # => "--- \"01234\"\n"
YAML.load(zip.to_yaml) # => "01234"
Run Code Online (Sandbox Code Playgroud)
如果我们把它当作一个整数,它的前导会被0丢弃,这是我所期望的。
zip.to_i.to_yaml # => "--- 1234\n"
YAML.load(zip.to_i.to_yaml) # => 1234
Run Code Online (Sandbox Code Playgroud)
在您的示例中:
zipcode: 04270
Run Code Online (Sandbox Code Playgroud)
zipcode是一个 YAML 整数。它应该用引号括起来以保持其“字符串性”。
维基百科的 YAML 文章有一个很好的例子,展示了如何消除数据类型的歧义。
您可以zipcode在解析 YAML 之前调整YAML 中的所有实例,例如:
require 'yaml'
yaml_data = '2185:
id: 3274
civility: Mr
address: CROIX DES COMBES
zipcode: 04270
'
yaml_data.gsub(/zipcode: (\d+)/, 'zipcode: "\1"')
# => "2185:\n id: 3274 \n civility: Mr \n address: CROIX DES COMBES \n zipcode: \"04270\"\n"
YAML.load(yaml_data.gsub(/zipcode: (\d+)/, 'zipcode: "\1"'))
# => {2185=>{"id"=>3274, "civility"=>"Mr", "address"=>"CROIX DES COMBES", "zipcode"=>"04270"}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4975 次 |
| 最近记录: |