我正在使用 Google 的定义 URL,它返回包含 JSONP 数据的响应流(见下文)。
GET http://www.google.com/dictionary/json?callback=a&sl=en&tl=en&q=epitome
响应看起来像这样:
a({"query": "epitome", ...}, 200, null)
在解析 JSON 之前,我必须剥离回调参数;这意味着删除第一个 {
之前的所有内容和最后一个 }
之后的所有内容。
我有正则表达式来剥离回调参数,但在将它用于 HTTParty 请求时遇到问题。
去除填充的正则表达式
^\w+\(|[^}]+$
我尝试使用以下方法,但出现错误。
base_url = "http://www.google.com/dictionary/json?callback=a&sl=en&tl=en&q="
word = "epitome"
request = HTTParty.get("#{base_url}#{word}").gsub(/^\w+\(|[^}]+$/)
HTTPParty 自动尝试解析数据,忽略 gsub!
方法;所以我不确定如何在 HTTParty 尝试解析返回的数据之前添加正则表达式来去除回调参数。
有什么建议吗?
最佳答案
使用自定义解析器。在此示例中,我使用子字符串去除填充,但如果您愿意,也可以使用正则表达式:
require 'httparty'
class JsonpParser < HTTParty::Parser
SupportedFormats = {"text/javascript" => :jsonp}
def jsonp
JSON.load(body[2..-11], nil)
end
end
class Dictionary
include HTTParty
parser JsonpParser
def self.define(word)
get "http://www.google.com/dictionary/json?callback=a&sl=en&tl=en&q=#{word}"
end
end
Dictionary.define 'epitome'
关于ruby-on-rails - 在 HTTParty 中删除用于解析的 JSONP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20906258/