Me sorprende que nadie haya señalado el []método de JSON , que hace que decodificar y codificar de / a JSON sea muy fácil y transparente.
Si el objeto tiene forma de cadena, analice la cadena y devuelva el resultado analizado como una estructura de datos Ruby. De lo contrario, genere un texto JSON a partir del objeto de estructura de datos Ruby y devuélvalo.
Considera esto:
require 'json'
hash = {"val":"test","val1":"test1","val2":"test2"} # => {:val=>"test", :val1=>"test1", :val2=>"test2"}
str = JSON[hash] # => "{\"val\":\"test\",\"val1\":\"test1\",\"val2\":\"test2\"}"
strahora contiene el JSON codificado hash.
Es fácil revertirlo usando:
JSON[str] # => {"val"=>"test", "val1"=>"test1", "val2"=>"test2"}
Los objetos personalizados deben to_sdefinirse para la clase, y dentro de ella se convierte el objeto en un hash y luego se usa to_jsonen él.
value = '{"val":"test","val1":"test1","val2":"test2"}'podría haber sido más legible.