2011-11-01 20 views
105

Tengo un objeto JSON que sostiene el siguiente valor:Convertir JSON al rubí de hash

@value = {"val":"test","val1":"test1","val2":"test2"} 

Quiero bucle a través de él en Ruby para obtener los pares de valores clave. Cuando uso @each, no iterar a través del objeto, ya que no está en la forma de rubí de hash:

@value = {"val"=>"test","val1"=>"test1","val2"=>"test2"} 

¿Cómo puedo convertir el objeto JSON anterior a Ruby de hash?

Respuesta

205

¿Qué tal el siguiente fragmento?

require 'json' 
value = '{"val":"test","val1":"test1","val2":"test2"}' 
puts JSON.parse(value) # => {"val"=>"test","val1"=>"test1","val2"=>"test2"} 
+7

'value = '{ "val": "test", "val1": "test1", "val2": "test2"}' 'podría haber sido más fácil de leer . – luckykrrish

2

Ha intentado: http://flori.github.com/json/.

Si eso falla, ¿podría simplemente analizarlo? Si solo le interesan las matrices, algo para dividir lo anterior será bastante simple. N

3

Asumiendo que tiene un hash JSON dando vueltas en alguna parte, para convertir automáticamente en algo así como la versión de Warhog, envuelva su contenido de hash JSON en% {q} HSH etiquetas. Esto parece agregar automáticamente todo el texto escapado necesario como en la respuesta de WarHog

6

También puede usar el método de ruby: with_indifferent_access para que pueda acceder al cuerpo con símbolos o cadenas.

value = '{"val":"test","val1":"test1","val2":"test2"}' 
json = JSON.parse(value).with_indifferent_access 

continuación

json[:val] #=> "test" 

json["val"] #=> "test"