gpt4 book ai didi

ruby - 如何在没有类型映射的情况下在ruby中解析yaml

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:59 27 4
gpt4 key购买 nike

我想从 yaml (PHPMyAdmin) 中的 Mysql 转储中获取数据,但数据没有被引号括起来。

我有可以从 0 开始的邮政编码,解析后我得到八进制值的十进制版本,而不是简单的字符串。

我怎样才能强制 Yaml 解析器不进行自动映射,或者只获取所有字符串数据?

谢谢

== 更新 ==

2185:
id: 3274
civility: Mr
address: CROIX DES COMBES
zipcode: 04270

最佳答案

如果您的邮政编码值是字符串,它们可能应该在数据库中,并且它们被正确转换为 YAML,那么它们将被 Ruby 的 YAML 解析器重新转换回字符串:

require 'yaml'
zip = '01234'

如果我们将其视为字符串,它会正确转换。

zip.to_yaml # => "--- \"01234\"\n"
YAML.load(zip.to_yaml) # => "01234"

如果我们将它视为一个整数,它的前导 0 会被删除,这是我所期望的。

zip.to_i.to_yaml # => "--- 1234\n"
YAML.load(zip.to_i.to_yaml) # => 1234

在您的示例中:

zipcode: 04270

zipcode 是一个 YAML 整数。它应该包含在引号内以保持其“字符串性”。

Wikipedia's YAML article有一个很好的例子展示了应该如何消除数据类型的歧义。


您可以在解析 YAML 之前调整所有 zipcode 的实例,例如:

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"}}

关于ruby - 如何在没有类型映射的情况下在ruby中解析yaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830624/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com