gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:30 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com