我正在使用HTTParty来调用API。当我在url中有回调时,它会导致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")
有谁知道造成这种情况的原因,以及如何解决?
答案 0 :(得分:2)
问题是响应是javascript,而不是JSON。要修复它,你可以这样做:
response.gsub! /^\d+\((.*)\);?$/m, '\\1'
或类似的东西。
答案 1 :(得分: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