ruby-on-rails - 在 HTTParty 中删除用于解析的 JSONP

标签 ruby-on-rails ruby

我正在使用 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/

相关文章:

javascript - rails-javascript 交互的最佳实践?

javascript - ruby rails 4 : How to include Javascript and CSS?

ruby - 关于如何创建参数化流 api 有什么想法吗?

ruby-on-rails - Ruby on Rails 迁移从字符串转换为十进制

ruby - ruby 程序开始时 "#!/usr/local/bin/ruby -w"的用途是什么

ruby-on-rails - rails 4.1。 Heroku ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR: operator does not exist: numeric - character varying

sql - 尽管需要 'will_paginate/array',但数组无法与 will_paginate 一起使用?

ruby-on-rails - rails : How to pass data to Bash Script

ruby-on-rails - Rails 5 - 如何获取 activerecord 的 serializable_hash?

Ruby——将段落中每个句子的首字母大写