我一直在尝试在 ruby 项目中使用 json 格式的 JSONP 数据。
根据您的经验,您是如何解决这个问题的?
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
根据我的经验,一种方法是使用此正则表达式来过滤掉函数回调名称:
/(\{.*\})/m
或者懒惰的方法是找到第一次出现 "(" 的索引,然后用最后一个字符作为子串,这将是 ")" 。
我一直在这里寻找答案,没有得到可靠的答案,希望这会有所帮助。
干杯