用Ruby替换文本

时间:2018-08-20 23:47:59

标签: ruby

我正在尝试用Ruby替换json文件中的模式。输入文件具有:

p={'x': 1534804991, 'y': 0.1}

我想要输出:

p={:x=>1534804991, :y=>0.1}

我尝试使用gsub

p.gsub(''x'',':x=>')
p.gsub("'x'",":x=>")
p.sub!(\w/x\w/, ":x=>")

但是没有用。

2 个答案:

答案 0 :(得分:3)

我猜想要转换的点-或获取哈希的新表示形式-其键是符号,而不是您在输入示例中当前显示的字符串。

为此,transform_keys会起作用:

hash = {'x': 1534804991, 'y': 0.1}
p hash.transform_keys(&:to_sym) # {:x=>1534804991, :y=>0.1}

如果您的Ruby版本不支持transform_keys,则可以使用each_with_object或任何“旧”方式:

hash.each_with_object({}) { |(k, v), h| h[k] = v }

为了更改哈希中某个键的值,必须访问其元素(键,值),然后在该元素上进行操作或分配(给新对象)。

答案 1 :(得分:0)

我请客,您的意思是:

p = File.read('xxx.json')
# => "{'x': 1534804991, 'y': 0.1}" 

puts p
# => {'x': 1534804991, 'y': 0.1}

如果是这样,可以像下面那样使用gsub

puts p.gsub(/'(\w+)': /, ':\1=>')
# => {:x=>1534804991, :y=>0.1}