ruby プロジェクトで JSONP データを json 形式で使用しようとしています。
これまでの経験から、どのように対処しましたか?
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
私の経験から、1 つの方法は、この正規表現を使用して関数のコールバック名を除外することです。
/(\{.*\})/m
または怠惰な方法は、 "(" の最初の出現のインデックスを見つけ、最後の文字である ")" でそれを部分文字列にすることです。
ここで答えを探していましたが、確かな答えが得られませんでした。
乾杯