Ruby on rails 带有回调的HTTParty.get会导致MultiJson::DecodeError。
我正在使用HTTParty调用一个API。当url中有回调时,会导致MultiJson::DecodeError:Ruby on rails 带有回调的HTTParty.get会导致MultiJson::DecodeError。,ruby-on-rails,ruby,ruby-on-rails-3,json,httparty,Ruby On Rails,Ruby,Ruby On Rails 3,Json,Httparty,我正在使用HTTParty调用一个API。当url中有回调时,会导致MultiJson::DecodeError: MultiJson::DecodeError in PagesController#home 756: unexpected token at '12345({"label":"daydata","data":[[1335484800883,69586], [1335571201001,17725]]}); 我的get呼叫如下所示: @data = HTTParty.get("
MultiJson::DecodeError in PagesController#home
756: unexpected token at '12345({"label":"daydata","data":[[1335484800883,69586],
[1335571201001,17725]]});
我的get呼叫如下所示:
@data = HTTParty.get("http://powermeters.appspot.com/getdays?id=1234567890&from=2012-04-24&to=2012-04-29&callback=12345")
有人知道这是什么原因,以及如何解决吗?问题是响应是javascript,而不是JSON。要解决此问题,您可以执行以下操作:
response.gsub! /^\d+\((.*)\);?$/m, '\\1'
或者类似的东西。您也可以重写解析器。下面是一个简单的例子 如果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
是的,看起来像一个JSONP服务,您可以通过一个
标记,或者显式地,或者通过某种客户端库,在自己的网站上指定要执行的回调。@d11wtq-Mm,好的。如果可以在Rails控制器中获取请求,我会对数据进行一些额外的计算。或者我必须从Javascript中获取它,然后将它传递给我的控制器,这样的脚本看起来怎么样?谢谢。你有没有试过@pguardiario的建议,即去掉围绕它的函数调用?@d11wtq是的,我试过了,但没有成功。当我使用HTTparty发出get请求时,应用程序似乎会崩溃,因此我不知道是否会对gsub!做出响应!。你知道我应该把它放在哪里吗?我最终使用@pguardiario的答案,并从HTTParty更改为Net:HTTP.get\u response,从:。谢谢