2011-07-19 20 views
2

を使用して確認してください。それを解析することに問題はありません。しかし、場合によってはJSONにトークン値がありません。値が存在するかどうかをチェックするにはどうすればいいですか?チェックしないと、アプリがEXCBadAccessでクラッシュするためです。JSONのパースとは、私は、このJSONを持ってSBJSON

ありがとうございます!

+0

私の答えについて明確にできるものがあれば教えてください:) – RedBlueThing

答えて

2

SBJSONはNSDictionaryオブジェクトを返します。 objectForKeyによって返されたポインタがnilであるかどうかをチェックする必要があります。NSNullであるかどうかもチェックする必要があります(値が存在する場合はtrue、JSONではnullに設定されます)。また、データが実際にNSDictionaryの:

id dataDictionaryId = [resultsDictionary objectForKey:@"data"]; 

// check that it isn't null ... this will be the case if the 
// data key value pair is not present in the JSON 
if (!dataDictionaryId) 
{ 
    // no data .. do something else 
    return; 
} 

// then you need to check for the case where the data key is in the JSON 
// but set to null. This will return you a valid NSNull object. You just need 
// ask the id that you got back what class it is and compare it to NSNull 
if ([dataDictionaryId isKindOfClass:[NSNull class]]) 
{ 
    // no data .. do something else 
    return; 
} 

// you can even check to make sure it is actually a dictionary 
if (![dataDictionaryId isKindOfClass:[NSDictionary class]]) 
{ 
    // you got a data thing, but it isn't a dictionary? 
    return; 
} 

// yay ... it is a dictionary 
NSDictionary * dataDictionary = (NSDictionary*)dataDictionaryId; 

// similarly here you could check to make sure that the token exists, is not null 
// and is actually a NSString ... but for this snippet, lets assume it is 
NSString * token = [dataDictionary objectForKey:@"token"]; 
if (!token) 
    // no token ... do something else 

更新

これは私がSBJSONの解析結果をチェックするために書いたテストコードです:そこだ時にデータ辞書内で何プリントアウトしてみ

NSError* error = NULL; 
id json = [parser objectWithString:@"{\"data\":null}" error:&error]; 
NSDictionary * results = (NSDictionary*)json; 
id dataDictionaryId = [results objectForKey:@"data"]; 
if (!dataDictionaryId || [dataDictionaryId isKindOfClass:[NSNull class]]) 
    return NO; 
+0

ありがとうございますが、アプリはまだクラッシュします。もし私がトークンを得れば、それはうまくいくが、もしそれがなければ、それはまだクラッシュする。これはトークンがないときに戻ってくるjsonです:http://pastie.org/2234627 – Sunil

+0

@Sunil私はそれを試してみて、あなたに戻ってきます:) – RedBlueThing

+0

@Sunilそれを試して、有効なNSNull "data":nullの場合のオブジェクトを返します。だからあなたはそれをチェックする必要があります。 – RedBlueThing

0

をトークンはありません。
Peraphsそれはゼロではありません。
!dataDictionaryを置くのではなく、isKindOfClass(NSDictionary)をチェックすることができます。

関連する問題