Analizando una cadena JSON en Ruby

Tengo una cadena que quiero analizar en Ruby:

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}' 

¿Hay una manera fácil de extraer los datos?

Esto se ve como la notación de objetos Javascript (JSON) . Puede instalar la joya JSON para Ruby :

 gem install json 

Necesitarías la gem en tu código así:

 require 'rubygems' require 'json' 

Entonces puedes analizar tu cadena JSON de la siguiente manera:

 JSON.parse(string) 

También hay otras implementaciones de JSON para Ruby:

  • Enlaces YAJL C para Ruby
  • JSON :: Stream

Solo para extender un poco las respuestas con qué hacer con el objeto analizado:

 # JSON Parsing example require "rubygems" require "json" string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}' parsed = JSON.parse(string) # returns a hash p parsed["desc"]["someKey"] p parsed["main_item"]["stats"]["a"] # Read JSON from a file, iterate over objects file = open("shops.json") json = file.read parsed = JSON.parse(json) parsed["shop"].each do |shop| p shop["id"] end 

A partir de Ruby v1.9.3 no necesita instalar ninguna Gema para analizar JSON, simplemente use require 'json' :

 require 'json' json = JSON.parse '{"foo":"bar", "ping":"pong"}' puts json['foo'] # prints "bar" 

Ver JSON en Ruby-Doc.

Parece una cadena JSON. Puede usar una de muchas bibliotecas JSON y es tan simple como hacer:

 JSON.parse(string) 

Esto es un poco tarde, pero me encontré con algo interesante que parece importante contribuir.

Accidentalmente escribí este código, y parece funcionar:

 require 'yaml' CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file configs = YAML.load_file("#{CONFIG_FILE}") puts configs['desc']['someKey'] 

Me sorprendió ver que funciona, ya que estoy usando la biblioteca YAML, pero funciona.

La razón por la que es importante es que yaml viene incorporado con Ruby por lo que no hay instalación de gems.

Estoy usando las versiones 1.8.xy 1.9.x, por lo que la biblioteca json no está incorporada, pero está en la versión 2.x.

Técnicamente, esta es la forma más fácil de extraer los datos en una versión inferior a 2.0.

Esa información parece estar en formato JSON.

Puede usar esta implementación JSON para que Ruby la extraiga.

Sugiero Oj, ya que es waaaaaay más rápido que la biblioteca JSON estándar.

https://github.com/ohler55/oj

( ver comparaciones de rendimiento aquí )