2014-11-17 80 views
1

我想檢查響應是否有效的JSON。我正在向某些URL發送HTTParty或Restclient請求,並檢查返回的響應是否爲有效的JSON?valid_json?檢查紅寶石不工作

我參考了鏈接here。這不起作用。

我的代碼:

require 'json' 

def get_parsed_response(response) 
    if not response.is_a? String or not response.valid_json? 
    # code 
    end 
end 

錯誤:

/home/user/.rvm/gems/ruby-2.1.0/gems/httparty-0.13.1/lib/httparty/response.rb:66:in `method_missing': undefined method `valid_json?' for #<HTTParty::Response:0x00000002497918> (NoMethodError) 
+1

該鏈接顯示了一個函數的定義,如果將其放入代碼中,則該函數將稱爲「valid_json?(響應)」。另外,因爲在確定它是有效的之後你總會試圖解析JSON,所以你只會做同樣的事情兩次。只需解析你的JSON並從錯誤中拯救出來,忘掉'valid_json?'。 – Amadan

+0

謝謝 - @Amadan – Sam

+0

爲什麼不利用'除非''而不是舊''如果不''的力量呢? –

回答

1

你應該打電話response.body

responseHTTParty::Response對象。你真正想要處理的是代表HTTP響應主體的String對象。

+0

@Amadan是的,但錯誤消息沒有,並且這個錯誤信息表明'response'是一個'HTTParty :: Response'對象。 –

+1

糟糕,沒有看到錯誤!繼續,不理我... – Amadan

2

比我的評論更具體,我建議你使用這樣的:

value = nil 
begin 
    value = JSON.parse(response) 
    # do whatever you do when not error 
rescue JSON::ParserError, TypeError => e 
    puts "Not a string, or not a valid JSON" 
    # do whatever you do when error 
end