2011-11-17 16 views
12

estoy usando HTTParty para tirar de una lista de libros de un usuario de Facebook pero estoy teniendo problemas para analizar la respuesta:de análisis HTTParty respuesta

Facebook devuelve datos de esta manera:

{ 
    "data": [ 
    { 
     "name": "Title", 
     "category": "Book", 
     "id": "21192118877902", 
     "created_time": "2011-11-11T20:50:47+0000" 
    }, 
    { 
     "name": "Title 2", 
     "category": "Book", 
     "id": "1886126860176", 
     "created_time": "2011-11-05T02:35:56+0000" 
    }, 

Y HTTParty análisis sintácticos eso en un objeto de rubí. He intentado algo como esto (donde ret es la respuesta) ret.parsed_response y eso devuelve la matriz de datos, pero en realidad el acceso a los elementos dentro devuelve un error de método no encontrado.

Esta es una muestra de lo que en realidad devuelve HTTParty:

#<HTTParty::Response:0x7fd0d378c188 @parsed_response={"data"=>[{"name"=>"Title", "category"=>"Book", "id"=>"21192111877902", "created_time"=>"2011-11-11T20:50:47+0000"}, {"name"=>"Title 2", "category"=>"Book", "id"=>"1886126860176", "created_time"=>"2011-11-05T02:35:56+0000"}, {"name"=>"Thought Patterns", "category"=>"Book", "id"=>"109129539157186", "created_time"=>"2011-10-27T00:00:16+0000"}, 
+1

¿Está intentando esto 'ret.parsed_response [" data "]' y 'ret.parsed_response [" data "]. First [" name "]'? – rubyprince

+1

No ... Estaba haciendo 'ret.parsed_response.data' – Slick23

Respuesta

29

¿Tiene alguna código que es tirar un error? La variable parsed_response de la respuesta HTTParty es un hash, no una matriz. Contiene una clave, "data" (la cadena, NO el símbolo). El valor de la clave "data" en el hash es un conjunto de valores hash, por lo que iteraría como tal:

data = ret.parsed_response["data"] 
data.each do |item| 
    puts item["name"] 
    puts item["category"] 
    puts item["id"] 
    # etc 
end 
+1

Ese fue mi problema: usar' datos' de la manera que lo ha hecho aquí. ¡Gracias! – Slick23

+0

¡No hay problema, buena suerte! –

+1

Perfecto gracias !!! Esto me ayudó mucho ! –

7

Sólo una información adicional - No Siempre Es un defecto respuesta JSON

de result.response.body HTTParty o result.response.parsed_response hace no siempre tienen forma de Hash

Sólo depende generalmente de las cabeceras que se está utilizando en su solicitud. Por ej., debe especificar el encabezado Accept con el valor application/json mientras golpea GitHub API, de lo contrario, simplemente devuelve como cadena.

Luego deberá usar JSON.parse(data) para convertir la respuesta de cadena en objeto Hash.