2011-01-30 10 views
4

内JSON応答が特定の要素が含まれていることを確認してください。は、効率的にJSONレスポンスを指定された配列

{ 
    "tags": [ 
    { 
     "id": 81499, 
     "name": "sign-in" 
    }, 
    { 
     "id": 81500, 
     "name": "user" 
    }, 
    { 
     "id": 81501, 
     "name": "authentication" 
    } 
    ] 
} 

RSpecの2を使用するが、私はこの応答は名認証を持つタグが含まれていることを確認します。 Rubyにはかなり新しいので、配列を繰り返し、includeを使って名前の各値をチェックするより効率的な方法があると思いましたか?またはマップ/収集する。私は/認証/ iを確認する正規表現をユーザーに単純に使うことができますが、これは最善のアプローチのようには見えません。

これは、これまでの私のスペックです:だから

it "allows filtering" do 
    response = @client.story(15404) 

    #response.tags. 
end 

答えて

4

t = JSON.parse '{ ... }' 

は次に、この式が偽である、nilを返しますか、それが検出されたものを返します場合は、真の真偽値評価を有する。

t['tags'].detect { |e| e['name'] == 'authentication' } 

tagsキーが存在しない場合、これはNoMethodErrorが発生します。私はテストでうまく扱わだと思いますが、あなたがまた偽(すなわち、ゼロ)を表示するような場合のために手配することができます:

t['tags'].to_a.detect { |e| e['name'] == 'authentication' } 
+0

素晴らしいです!正確に私が探していたメソッド:) Enumerableクラスを見落とした。 – raidfive

関連する問題