2012-05-07 1 views
0

Я использую HTTParty для вызова API. Когда у меня есть обратный вызов в URL он вызывает MultiJson :: DecodeError:HTTParty.get с обратным вызовом вызывает MultiJson :: DecodeError.

MultiJson::DecodeError in PagesController#home 

756: unexpected token at '12345({"label":"daydata","data":[[1335484800883,69586], 
[1335571201001,17725]]}); 

Мой прибудете вызов выглядит следующим образом:

@data = HTTParty.get("http://powermeters.appspot.com/getdays?id=1234567890&from=2012-04-24&to=2012-04-29&callback=12345") 

Кто-нибудь знает, что является причиной этого, и как ее решить?

ответ

2

Проблема в том, что ответ - это javascript, а не JSON. Чтобы исправить это, вы можете:

response.gsub! /^\d+\((.*)\);?$/m, '\\1' 

или что-то подобное.

+0

Yep, выглядит как сервис JSONP, где вы указываете обратный вызов для выполнения на вашем собственном веб-сайте, с помощью '

0

Вы также можете переопределить парсер. Ниже приведен простой пример.

if MultiJson... вытягивается прямо из HTTParty-х JSon парсер

class Foo 
    include HTTParty 
    base_uri "http://foo.bar" 

    parser lambda { |body,_| 
    new_body = body.gsub(/^\d+\((.*)\)$/, '\1') 
    if MultiJson.respond_to?(:adapter) 
     MultiJson.load(new_body) 
    else 
     MultiJson.decode(new_body) 
    end 
    } 
end