213 votos

¿Cómo parsear JSON con Ruby on Rails?

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

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

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

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

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

Pensamientos? Ayuda? Cualquier y todo sería muy apreciada.

310voto

pguardiario Puntos 19925

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

require 'json'
hash = JSON.parse string

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 que desea asociar con el shortUrl es un objeto de Sitio, el cual tiene dos atributos - short_url y long_url. Que, para conseguir el shortUrl y asociarlo con el objeto de Sitio adecuado, 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 antiguo. pguardiario la tiene.

Un sitio para retirar es JSON implementación de Ruby. Este sitio ofrece una joya que puede instalar de una forma mucho más rápida C de extensión de la variante.

Con los puntos de referencia dado a 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 el Milan Novota la respuesta con esta joya, pero el análisis sería:

parsed_json = JSON(your_json_string)

14voto

Jim Lim Puntos 4981

Aquí está una actualización para el 2013.

Ruby

Ruby 1.9 tiene un defecto JSON joya con extensiones en C. Se puede utilizar con

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

La parse! variante puede ser utilizado para el seguro fuentes. También hay otras gemas, que puede ser más rápido que la implementación predeterminada. Por favor, consulte multi_json de la lista.

Rieles

Versiones modernas de los Rails de uso multi_json, una joya que utiliza automáticamente la forma más rápida JSON gema disponible. Por lo tanto, el método recomendado es el uso de

object = ActiveSupport::JSON.decode json_string

Por favor, consulte ActiveSupport::JSON para obtener más información. En particular, la importante línea en el método de la fuente

data = MultiJson.load(json, options)

A continuación, en el Gemfile, incluyen 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