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

問題は、応答が JSON ではなく JavaScript であることです。それを修正するには、次のことができます。

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 に答える