0

我一直在尝试在 ruby​​ 项目中使用 json 格式的 JSONP 数据。

根据您的经验,您是如何解决这个问题的?

4

2 回答 2

1

JSONP 很容易处理。它只是一个小包装器中的 JSON,并且该包装器很容易剥离:

require 'open-uri'
require 'json'

URL = 'http://www.google.com/dictionary/json?callback=a&sl=en&tl=en&q=epitome'
jsonp = open(URL).read

jsonp现在包含 JSONP 格式的结果:

jsonp[0, 3] # => "a({"
jsonp[-11 ... -1] # => "},200,null"

那些无关的部分,a{也是,200,null"将数据传递给 JSON 进行解析时的麻烦点,因此我们将它们剥离。

只需要一个简单、贪婪的正则表达式。/{.+}/将找到由最外面的花括号包裹的所有内容并将其返回,这就是 JSON 所需的全部内容:

data = JSON.parse(jsonp[/{.+}/])

data['query'] # => "epitome"
data['primaries'].size # => 1
于 2014-01-03T21:14:32.363 回答
0

根据我的经验,一种方法是使用此正则表达式来过滤掉函数回调名称:

/(\{.*\})/m

或者懒惰的方法是找到第一次出现 "(" 的索引,然后用最后一个字符作为子串,这将是 ")" 。

我一直在这里寻找答案,没有得到可靠的答案,希望这会有所帮助。

干杯

于 2013-03-19T11:24:16.347 回答