2011-01-30 5 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을 반환하거나, 그것을 감지 일을 반환하는 경우, 어떤 true의 부울 값을가집니다. 더 tags 키가 존재하지 않는 경우는

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

NoMethodError을 올릴 것이다. 테스트에서 제대로 처리되었지만 그 케이스가 false (즉, 없음)로 표시되도록 정렬 할 수 있습니다.

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

우수! 정확히 내가 찾고 있던 방법 :) Enumerable 클래스를 보지 않았다. – raidfive