2016-05-31 25 views
0

jsonがストアデータを含むスクリプトテキストから解析しようとしています。これはページhttp://www.buildbase.co.uk/storefinderの中にあります。私は周りに働いているスクリプトテキストはhttp://pastebin.com/embed_js/3cnewiShで、次のように私のコードは次のとおりです。私はつもりどこスクリプトテキストのJSON構文解析エラーruby

from /home/private/.rvm/gems/ruby-2.1.5/gems/json-1.8.3/lib/json/common.rb:155:in `parse' 
from /home/private/.rvm/gems/ruby-2.1.5/gems/json-1.8.3/lib/json/common.rb:155:in `parse' 
from (irb):240 
from /home/private/.rvm/rubies/ruby-2.1.5/bin/irb:11:in `<main>' 

わからない。:

stores_url = "http://www.buildbase.co.uk/storefinder" 
mechanize = Mechanize.new 
stores_page = mechanize.get(stores_url) 
stores_script_txt = stores_page.search("//script[contains(text(), 'storeLocator.initialize(')]")[0].text 
stores_jsons = stores_script_txt.split("storeLocator.initialize($.parseJSON('{\\\"all\\\":")[-1].split(",\\\"selected\\\":0}') ,\tfalse);\n  });")[0] 
puts stores_jsons 
stores_result = JSON.parse(stores_jsons) 

JSON.parseのように私にエラーを与えます間違っているのはJSON文字列が私には有効だと思われるからです。

+0

のためにあなたは私たちがそれを試すの実際のJSONを見ることができるように、単純な '' stores_result = '行の前にstores_jsons'を置く追加できます解析する? –

+0

@PaulEllsworthが完了しました。 –

+0

@ PaulEllsworth、hi paul store_jsonsでjson文字列を取得しようとしたときにもう一度間違いを修正しました。あなたは見ていただけますか? –

答えて

1

いくつか問題がありました。まず、あなたが得たテキストは引用符などの代わりに\ "を使用するという点で正しく書式化されていませんでした。

第2に、引用符を含むHTMLタグが含まれていました。

私はあなたが必要とするデータの量はわかりませんが、このコードはうまくいきます。どのくらい頑強であるかもわかりません(例えば、私はちょうどに置き換えました)。任意の\"

require 'mechanize' 
stores_url = "http://www.buildbase.co.uk/storefinder" 
mechanize = Mechanize.new 
stores_page = mechanize.get(stores_url) 
stores_script_txt = stores_page.search("//script[contains(text(), 'storeLocator.initialize(')]")[0].text 
stores_jsons = stores_script_txt.split("storeLocator.initialize($.parseJSON('{\\\"all\\\":")[-1].split(",\\\"selected\\\":0}') ,\tfalse);\n  });")[0] 
stores_jsons = stores_jsons.gsub('\"', '"').gsub(/<\/?[^>]*>/, '').gsub(/\n\n+/, "\n").gsub(/^\n|\n$/, '') 
stores_result = JSON.parse(stores_jsons)