213 votos

¿Cómo analizo JSON con Ruby on Rails?

Estoy buscando una forma sencilla de parsear JSON, extraer un valor y escribirlo en una base de datos en Rails.

Específicamente lo que estoy buscando, es una manera de extraer shortUrl del JSON devuelto por la API de bit.ly:

{
  "errorCode": 0,
  "errorMessage": "",
  "results":
  {
    "http://www.foo.com":
    {
       "hash": "e5TEd",
       "shortKeywordUrl": "",
       "shortUrl": "http://bit.ly/1a0p8G",
       "userHash": "1a0p8G"
    }
  },
  "statusCode": "OK"
}

Y luego tomar ese shortUrl y escribirlo en un objeto ActiveRecord asociado a la URL larga.

Esta es una de esas cosas que puedo pensar completamente en el concepto y cuando me siento a ejecutar me doy cuenta de que tengo mucho que aprender.

310voto

pguardiario Puntos 19925

Estas respuestas son un poco antiguas. Por lo tanto, te doy:

hash = JSON.parse string

Rails debería cargar automáticamente el archivo json módulo para usted, por lo que no necesita añadir require 'json' .

169voto

Milan Novota Puntos 10892

El análisis de JSON en Rails es bastante sencillo:

parsed_json = ActiveSupport::JSON.decode(your_json_string)

Supongamos que el objeto al que se quiere asociar la shortUrl es un objeto Site, que tiene dos atributos - short_url y long_url. Entonces, para obtener el shortUrl y asociarlo con el objeto Site apropiado, puedes hacer algo como:

parsed_json["results"].each do |longUrl, convertedUrl|
  site = Site.find_by_long_url(longUrl)
  site.short_url = convertedUrl["shortUrl"]
  site.save
end

47voto

lillq Puntos 4161

Esta respuesta es bastante antigua, pguardiario la tiene.

Un sitio que puede consultar es Implementación de JSON para Ruby . Este sitio ofrece una gema que puedes instalar para una variante de la extensión C mucho más rápida.

Con los puntos de referencia dados su página de documentación afirman que es 21.500x más rápido que ActiveSupport::JSON.decode

El código sería el mismo que la respuesta de Milan Novota con esta gema, pero el análisis sintáctico sería simplemente:

parsed_json = JSON(your_json_string)

14voto

Jim Lim Puntos 4981

He aquí una actualización para 2013.

Ruby

Ruby 1.9 tiene por defecto un Gema JSON con extensiones C. Se puede utilizar con

require 'json'
JSON.parse ''{ "x": "y" }'
# => {"x"=>"y"}

El parse! puede utilizarse para seguro fuentes. También hay otras gemas, que pueden ser más rápidas que la implementación por defecto. Por favor, consulte multi_json para la lista.

Rieles

Las versiones modernas de Rails utilizan multi_json , una gema que utiliza automáticamente la gema JSON más rápida disponible. Así, la forma recomendada es utilizar

object = ActiveSupport::JSON.decode json_string

Consulte ActiveSupport::JSON para más información. En particular, la línea importante en la fuente del método es

data = MultiJson.load(json, options)

Luego, en su Gemfile, incluya las gemas que desea utilizar. Por ejemplo,

group :production do
  gem 'oj'
end

3voto

user2726667 Puntos 31
require 'json'
out=JSON.parse(input)

Esto devolverá un Hash

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X