2011-11-17 10 views
12

sto usando HTTParty per tirare un elenco di libri di un utente Facebook, ma sto avendo difficoltà l'analisi della risposta:Analisi HTTParty risposta

Facebook restituisce i dati in questo modo:

{ 
    "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" 
    }, 

E HTTParty analizza quello in un oggetto rubino. Ho provato qualcosa di simile (dove ret è la risposta) ret.parsed_response e che restituisce l'array di dati, ma in realtà l'accesso agli elementi all'interno restituisce un metodo non trovato errore.

Questo è un esempio di ciò che ritorna HTTParty realtà:

#<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

Provate come questo 'ret.parsed_response [" data "]' e 'ret.parsed_response [" data "]. First [" nome "]'? – rubyprince

+1

No ... Stavo facendo ret.parsed_response.data' – Slick23

risposta

29

hai qualche codice che sta gettando un errore? La variabile parsed_response dalla risposta HTTParty è un hash, non un array. Contiene una chiave, "data" (la stringa, NON il simbolo). Il valore per la chiave "data" in hash è un array di hash, in modo da sarebbe iterare in quanto tale:

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

Questo era il mio problema: usare 'data' come hai fatto qui. Grazie! – Slick23

+0

Nessun problema, buona fortuna! –

+1

Perfetto grazie !!! questo mi ha aiutato molto! –

7

Just an informazioni aggiuntive - non è sempre un difetto risposta JSON

del result.response.body HTTParty o result.response.parsed_response fa non hanno sempre sotto forma di un Hash

dipende solo in generale sulle intestazioni che si sta utilizzando nella vostra richiesta. Ad es., è necessario specificare l'intestazione Accept con il valore application/json mentre si preme API GitHub, altrimenti viene semplicemente restituita come stringa.

Quindi è necessario utilizzare JSON.parse(data) per lo stesso per convertire la risposta stringa in oggetto Hash.

Problemi correlati