Solución:
El generador JSON convierte símbolos en cadenas porque JSON no admite símbolos. Dado que las claves JSON son todas cadenas, el análisis de un documento JSON producirá un hash Ruby con claves de cadena de forma predeterminada.
Puede decirle al analizador que use símbolos en lugar de cadenas mediante la symbolize_names
opción.
Ejemplo:
original_hash = {:info => [{:from => "Ryan Bates", :message => "sup bra", :time => "04:35 AM"}]}
serialized = JSON.generate(original_hash)
new_hash = JSON.parse(serialized, {:symbolize_names => true})
new_hash[:info]
#=> [{:from=>"Ryan Bates", :message=>"sup bra", :time=>"04:35 AM"}]
Referencia: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/JSON.html#method-i-parse
En resumen, no. Piénselo de esta manera, almacenar símbolos en JSON es lo mismo que almacenar cadenas en JSON. Por lo tanto, no es posible distinguir entre los dos cuando se trata de analizar la cadena JSON. Por supuesto, puede convertir las claves de cadena de nuevo en símbolos o, de hecho, incluso crear una clase para interactuar con JSON que lo haga automáticamente, pero recomendaría solo usar cadenas.
Pero, por el simple hecho de hacerlo, aquí están las respuestas a esta pregunta las veces que se hizo anteriormente:
¿Cuál es la mejor manera de convertir un par clave-valor con formato json a ruby hash con el símbolo como clave?
ActiveSupport :: JSON decodifica símbolos de pérdida de hash
O quizás un HashWithIndifferentAccess
Resolví mi problema similar al llamar al método with_indifferent_access en él
Aquí tengo una cadena json y podemos asignarla a la variable s
s = "{"foo":{"bar":"cool"}}"
Entonces ahora puedo analizar los datos con la clase JSON y asignarlos ah
h = JSON.parse(s).with_indifferent_access
Esto producirá un hash que puede aceptar una cadena o un símbolo como clave.
h[:foo]["bar"]
#=> "cool"