回答:
Railsのwith_indifferent_access
メソッドを使用して、シンボルまたは文字列で本文にアクセスすることもできます。
value = '{"val":"test","val1":"test1","val2":"test2"}'
json = JSON.parse(value).with_indifferent_access
その後
json[:val] #=> "test"
json["val"] #=> "test"
JSONハッシュがどこかにぶら下がっていると仮定して、それをWarHogのバージョンのようなものに自動的に変換するには、JSONハッシュの内容を%q{hsh}
タグでラップします。
これは、WarHogの回答のように、必要なすべてのエスケープテキストを自動的に追加するようです。
試しましたか:http : //flori.github.com/json/?
それが失敗した場合は、それを解析できますか?関心のある配列のみの場合、上記を分割するのは非常に簡単です。
JSONの[]
メソッドを誰も指摘しなかったことに驚いています。これにより、JSONのデコードとエンコードが非常に簡単かつ透過的になります。
オブジェクトが文字列に似ている場合、文字列を解析し、解析結果をRubyデータ構造として返します。それ以外の場合は、Rubyデータ構造オブジェクトからJSONテキストを生成し、それを返します。
このことを考慮:
require 'json'
hash = {"val":"test","val1":"test1","val2":"test2"} # => {:val=>"test", :val1=>"test1", :val2=>"test2"}
str = JSON[hash] # => "{\"val\":\"test\",\"val1\":\"test1\",\"val2\":\"test2\"}"
str
エンコードされたJSONが含まれるようになりましたhash
。
それを使用してそれを逆にするのは簡単です:
JSON[str] # => {"val"=>"test", "val1"=>"test1", "val2"=>"test2"}
to_s
クラスにはカスタムオブジェクトを定義する必要があり、その内部でオブジェクトをハッシュに変換してから使用to_json
します。
nice_hash gemを使用できます:https : //github.com/MarioRuiz/nice_hash
require 'nice_hash'
my_string = '{"val":"test","val1":"test1","val2":"test2"}'
# on my_hash will have the json as a hash, even when nested with arrays
my_hash = my_string.json
# you can filter and get what you want even when nested with arrays
vals = my_string.json(:val1, :val2)
# even you can access the keys like this:
puts my_hash._val1
puts my_hash.val1
puts my_hash[:val1]
value = '{"val":"test","val1":"test1","val2":"test2"}'
もっと読みやすいかもしれません。