2012-03-28 83 views
0

我正在抓緊我的頭髮去尋找解決方案。我需要解析一些JSON,但JSON寶石不允許我深入解析2級以上,所以我必須在每個塊上做很多事情。爲了消除一些我不想要的數據,我需要做一個if/else。 因此,這裏是我想要做什麼:如何傳遞一個塊作爲if語句的參數?

result['person']['participation'].each do |participation| 

    if participation['movie']['release'] { |release| release['releaseState']['code'] == 3011 || release['releaseState']['code'] == nil } 
    next 
    else 
    puts title = participation['movie']['originalTitle'] 
    end 
end 

我試圖與「除非」過,但我怕我不能在聲明中傳遞塊。如果沒有,你有辦法做我需要的嗎?

非常感謝!

這裏是JSON http://api.allocine.fr/rest/v3/filmography?partner=YW5kcm9pZC12M3M&profile=medium&code=5568&filter=movie&format=json

+0

你是什麼意思「不允許我解析超過2個層次」?似乎解析就好了。 – 2012-03-28 00:41:40

+0

@SergioTulentsev +1 – Blacksad 2012-03-28 00:46:06

+0

只是回答較低:)我從Ruby中得到一個錯誤 – Simon 2012-03-28 00:50:26

回答

1

我要看看你的文檔結構...但如果參與[ '電影'] [ '釋放']是一個數組,你可以使用Array#any?

result['person']['participation'].each do |participation| 

    if participation['movie']['release'].any? { |release| release['releaseState']['code'] == 3011 || release['releaseState']['code'] == nil } 
    next 
    else 
    puts title = participation['movie']['originalTitle'] 
    end 
end 

如果不是數組,請發佈文檔示例。

+0

通過執行put參與['movie'] ['release']。class,它揭示了它是一個Hash。由於它是json,似乎合乎邏輯。 – Simon 2012-03-28 00:34:00

+0

那你爲什麼不參加['movie'] ['release'] ['releaseState'] ['code']?我必須錯過一些東西。 – Blacksad 2012-03-28 00:43:47

+0

當我嘗試這樣做時,我從Ruby movie.rb獲取錯誤:29:in'block in getFilmography':undefined方法'[]'爲nil:NilClass(NoMethodError) from movie.rb:28:'each' from movie.rb:28:in'getFilmography' from movie.rb:52:in'

'(getFilmography是我的代碼所在的類) – Simon 2012-03-28 00:49:16