2016-11-12 1 views
2

플랫 파일로 작성된 해시에 구성 데이터를 저장합니다. 나는 해시를 클래스에 가져 와서 해당 메서드를 호출 할 수 있습니다.Ruby 해시 변환 문자열

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"문자열로 변환합니까?

+1

파일을 읽고 JSON.parse를 사용하십시오. – 23tux

+2

YML (yaml) 또는 JSON을 사용하여 파일에 해시를 저장하고 실제 데이터 구조로 루비 파일에서 읽을 수 있습니다. – Sivalingam

답변

7

eval(@data)을 사용할 수 있지만 실제로는 JSON과 같은 더 안전하고 간단한 데이터 형식을 사용하는 것이 좋습니다.

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')) 

이 간단하고 아주 쉽게 할 수 있습니다.

0

명확하지 않으면 JSON 파일에 포함되어야하는 해시 일뿐입니다.

puts File.read("simpleexample.json") 
    # #{"test1":{"url":"http://www.google.com"},"test2":{"{:title=>\"This\"}":{"failure":"sendemal"}}} 
코드는 정상적인 루비 소스 파일, "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 
해당 파일을 가정하는 것은 "simpleexample.json"입니다

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

해시에서 JSON 파일을 구성하려면

우리가 쓰기 :

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

이 해시 다음 반환합니다

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

당신은 YAML.load 방법

예를 시도 할 수 있습니다.

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

이것은 또한 같은 해시이 도움이 될

{"test"=>"t_value"} 

희망을 반환합니다

{"test"=>"t_value"} 

또한 평가

방법을 사용할 수 있습니다.