2014-12-05 2 views
1

구문 분석하는 JSON 배열이 있습니다. 나는 Staff 키의 값을 파싱하지만 때로는 Staff 객체에는 값이 없습니다.JSON 객체에 값이 있는지 확인하는 방법

예상 수익;

enter image description here

그러나 때때로 반환

key[@"staff"][@"staff_id"] 나던 존재하기 때문에 충돌이 앱을 야기

enter image description here

.

if (key[@"staff"][@"staff_id"]){ 
    //Parse staff 
} 
else{ 

    //staff is empty 

} 

을하지만 그것은 여전히 ​​존재 나던 [@"staff_id"]을 찾습니다 생각하기 때문이 아니라 충돌 :

필자했습니다.

또한

if (![key[@"staff"][@"staff_id"] isKindOfClass:[NSNull class]]) 

그리고

if (![key[@"staff"] isKindOfClass:[NSNull class]]) 

어떤 도움을 주시면 더 좋구요을 시도했습니다. :)

답변

2

위장 백엔드의 훌륭한 예입니다.
첫 번째 예에서 enter image description here 스태프는 두 번째 예제에서 사전입니다. enter image description here은 배열입니다.

배열 또는 사전을 결정하고 항상 반환하려면 백엔드 개발자에게 문의해야합니다.

BTW, 당신은 JSON이 null 값을 포함하는 경우가

if ([key[@"staff"] isKindOfClass:[NSDictionary class]] && key[@"staff"][@"staff_id"]) { 
    id staffId = key[@"staff"][@"staff_id"]; 
} else { 
    // Staff is empty 
} 
+1

[키 objectForKey : "staff_id"@] 단지의 경우 반환 JSON은 내가 할 수있는 경우에 I가 두 번을 투표 할 것 – Miknash

+0

unconsistent 보이기 때문에. 매우 감사합니다. :) – DevC

+0

@NickCatib fixed, DevC that great :) 문제가 해결되면 추가 독자를 위해 올바른 표시를하십시오. – l0gg3r

1

에만 클래스 NSNull의 객체를 얻을 것이다 해결할 수 있습니다. 예를 들어, 사전 { "key": null}은 키 "key"와 값 [NSNull null]을 갖는 키/값 쌍을 포함합니다. "isKindOfClass"를 사용하는 대신 NSNull 객체가 하나만 있기 때문에 [NSNull null]과 비교할 수 있습니다. JSON에 null 값이 포함되어 있지 않으면 그럴 수 없습니다.

JSON에 가끔 사전이 있고 때로는 배열이 포함되어있는 경우가 있습니다. JSON을 만드는 사람들을 비난하십시오. 당신은 예를 들어 쓸 수있다 : 나는 경우 조건 &&에 추가 할 수

id keyObject = ...; 
NSDictionary* keyDictionary = keyObject; 
NSArray* keyArray = keyArray; 

if ([keyDictionary isKindOfClass:[NSDictionary class]]) { 
    .. you've got a dictionary 
} else if ([keyArray isKindOfClass [NSArray class]]) { 
    .. you've got an array 
} else if (keyObject == nil) { 
    .. there wasn't actually any key object 
} else if (keyObject == [NSNull null]) { 
    .. your JSON contained "key": null 
} else { 
    .. your JSON contained a string, number, or boolean value 
} 
+0

Thanks @ gnasher729 :) – DevC

관련 문제