带回调的HTTParty.get会导致MultiJson :: DecodeError。

时间:2012-05-07 09:24:24

标签: 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]]});

我的来电看起来像这样:

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

有谁知道造成这种情况的原因,以及如何解决?

2 个答案:

答案 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