JSON.parse 的問題


#1

我去撈 https://sale.591.com.tw/index.php?module=search&action=rslist&is_new_list=1&type=2&searchtype=1&region=8&orderType=desc&section=103
的資料,因為資料是 json 所以我用 doc = JSON::parse(open(url).read) 去讀取
console 當下執行時輸出的是完整資料, 但是如果用 doc[‘recom’] 讀出來的只有片段 ( recom放了單行超長的html內容只是多了一些空白及斷行 ) 不知道如何解…


#2

我弄是正確的 A…不過 JSON 是 stdlib 和 Ruby 版本有很大的關係就是,之前也改了好幾版,所以版本不同可能會出現不同的結果,之前也遇到奇怪的問題就是

另外一方面,你測試如果有截掉,應該有東西沒跑好還是有哪裡有限制字串長度?所以還是檢查一下流程之類的,至於都會建議先清理過,類似你的東西 … 我應該會這樣寫唄(我目前用的是 Ruby 2.3.2)

require 'open-uri'
require 'json'
url = 'https://sale.591.com.tw/index.php?module=search&action=rslist&is_new_list=1&type=2&searchtype=1&region=8&orderType=desc&section=103'
doc = JSON.parse(open(url).read.gsub(/([\s\t]*\\r\\n[\s\t]*|\t)/ , '').gsub(/\s*>\s*/ , '>').gsub(/\s*<\s*/ , '<').gsub(/\s{2,}/ , ' '))
# 斷行與頭尾空白 & \t
# > 前後的空白
# < 前後的空白
# 重複重疊的空白

大概就是把雜訊過濾到最低,轉出來自然就會正常,其實弄更好一點應該是直接過濾到你需要的資料即可,根本不用全段的 JSON.parse 唄,類似

puts body.scan(/<span class=\\"layout\\">([^<]*)/).map{|s|JSON.parse("\"#{s[0]}\"")}
#=> 6房3廳4衛
#=> 2房2廳2衛
#=> ...

anyway 我應該會裁一裁然後才開始解唄


#3

我發現我的問題了…
原來我要的東西在是在另一個key main 裡面… 我耍白痴了… =.="