Ruby将字符串转换为哈希

时间:2016-11-12 20:05:26

标签: ruby hash

我将配置数据存储在以平面文件编写的哈希中。我想将哈希值导入我的类中,以便我可以调用相应的方法。

example.rb

{ 
  :test1 => { :url => 'http://www.google.com' }, 
  :test2 => {
    { :title => 'This' } => {:failure => 'sendemal'}
  }
}

simpleclass.rb

class Simple
  def initialize(file_name)
    # Parse the hash
    file = File.open(file_name, "r")
    @data = file.read
    file.close
  end

  def print
    @data
  end

a = Simple.new("simpleexample.rb")
b = a.print
puts b.class   # => String

如何将任何“Hashified”字符串转换为实际的Hash?

4 个答案:

答案 0 :(得分:7)

您可以使用eval(@data),但最好是使用更安全,更简单的数据格式,例如JSON。

答案 1 :(得分:2)

您可以尝试 YAML.load 方法

示例:

 YAML.load("{test: 't_value'}")

这将返回以下哈希值。

 {"test"=>"t_value"}

您还可以使用 eval 方法

示例:

 eval("{test: 't_value'}")

这也将返回相同的哈希值

  {"test"=>"t_value"} 

希望这会有所帮助。

答案 2 :(得分:1)

我想使用json gem。

在你的Gemfile中使用

gem 'json'

然后运行bundle install

在你的程序中,你需要宝石。

require 'json'

然后您可以通过执行以下操作创建“Hashfield”字符串:

hash_as_string = hash_object.to_json

并将其写入您的平面文件。

最后,您可以通过以下方式轻松阅读:

my_hash = JSON.load(File.read('your_flat_file_name'))

这很简单,也很容易。

答案 3 :(得分:0)

如果不清楚,它只是必须包含在JSON文件中的哈希。假设该文件是“simpleexample.json”:

puts File.read("simpleexample.json")
  # #{"test1":{"url":"http://www.google.com"},"test2":{"{:title=>\"This\"}":{"failure":"sendemal"}}}

代码可以在普通的Ruby源文件中,“simpleclass.rb”:

puts File.read("simpleclass.rb")
  # class Simple
  #   def initialize(example_file_name)
  #     @data = JSON.parse(File.read(example_file_name))
  #   end
  #   def print
  #     @data
  #   end
  # end

然后我们可以写:

require 'json'
require_relative "simpleclass"

a = Simple.new("simpleexample.json")
  #=> #<Simple:0x007ffd2189bab8 @data={"test1"=>{"url"=>"http://www.google.com"},
  #     "test2"=>{"{:title=>\"This\"}"=>{"failure"=>"sendemal"}}}> 
a.print
  #=> {"test1"=>{"url"=>"http://www.google.com"},
  #    "test2"=>{"{:title=>\"This\"}"=>{"failure"=>"sendemal"}}} 
a.class
  #=> Simple 

从哈希构造JSON文件:

h = { :test1=>{ :url=>'http://www.google.com' },
      :test2=>{ { :title=>'This' }=>{:failure=>'sendemal' } } }
我们写道:

File.write("simpleexample.json", JSON.generate(h))
  #=> 95