2012-05-06 11 views
0

私は、文字列を変換したい:へ文字列をオブジェクトに変換するにはどうすればよいですか?

"{\"message\":\"success\"}" 

{:message => "success"} 

はRubyでそれを行う簡単な方法はありますか?

successは、単純な文字列ではなく、別のオブジェクトでもよい同じフォームの別の文字列であってはなりません。

+1

があなたの入力だけでJSON文字列です(奇妙な名前の「symbolize_names」)ハッシュキーのシンボルを作るためのオプションを持っていますか? –

答えて

1

JSONパーサーが必要です。 http://www.json.orgを見て、適切なRubyクラスを返す適切なパーサーを見つけてください。

これは良い候補のようになります。

http://flori.github.com/json/をも参照してくださいstandard JSON Parser in the Ruby librariesについて以下のコメント「ムーが短すぎるのです」。続き

+6

Rubyには標準ライブラリのJSONパーサーが付属しています:http://ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/index.html –

+0

ああ、さらに良い!上記に追加されました。 – craigmj

-3

は、任意の醜いアプローチであるが、それを行うだけで、別の方法があります。

str=["{\"message\":\"success\"}", "{\"new_message\":\"fail\"}"] #=> ["{\"message\":\"success\"}", "{\"new_message\":\"fail\"}"] 

new=[];str.each{|string| new<<string.gsub(/["{}]/,'').split(':')} 
new #=> [["message", "success"], ["new_message", "fail"]] 
new=new.transpose #=> => [["message", "new_message"], ["success", "fail"]] 
hash=Hash.new #=> {} 
new[0].each_with_index{|x,i| hash[x.to_sym]=new[1][i]} #=> ["message", "new_message"] 
hash #=> {:message=>"success", :new_message=>"fail"} 

ことができますなら、私に教えてください。

幸運

+4

これは絶対に決してこのようにするべきではありません:) –

+0

@SergioTulentsev:私が言ったように、それは醜いアプローチです:)それはうまくいくでしょう、OPが尋ねるまで、 '成功は簡単な文字列ではないかもしれませんが他のオブジェクトであってもよい同じフォームの別の文字列 'である。 – kiddorails

3

JSON#parse

require 'json' 
p some_hash = JSON.parse("{\"message\":\"success\"}", {:symbolize_names=>true}) 
#=> {:message=>"success"} 
関連する問題