我正在尝试用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=>")
但是没有用。
答案 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}