0

我正在使用 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("http://powermeters.appspot.com/getdays?id=1234567890&from=2012-04-24&to=2012-04-29&callback=12345")

有谁知道是什么原因造成的,以及如何解决?

4

2 回答 2

2

问题是响应是 javascript,而不是 JSON。要修复它,您可以执行以下操作:

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

或类似的东西。

于 2012-05-07T09:41:18.457 回答
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
于 2013-06-12T23:06:42.923 回答