2013-06-17 26 views
8

テストの結果、既に[NSJSONSerialization JSONObjectWithData:options:error:]と解析されているJSONデータに対して、[NSJSONSerialization isValidJSONObject:]を返すだけで肯定的な結果が得られます。 official documentationによればisValidJSONObjectが期待どおりに動作しない

指定されたオブジェクトは、JSONデータに を変換することができるかどうかを示すブール値を返しisValidJSONObject。

しかし、NSDictionaryのを私はJSONから変換しようとしていたオブジェクトが細かい変換しているにもかかわらず、isValidJSONObject戻りNO

data is not JSON 
dict is JSON 

し、この時点では、巨大なNSMutableDictionaryオブジェクトである辞書の出力、:

NSURL * url=[NSURL URLWithString:urlString]; 
NSData * data=[NSData dataWithContentsOfURL:url]; 
NSError * error=[[NSError alloc] init]; 
NSMutableDictionary * dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

if([NSJSONSerialization isValidJSONObject:data]){ 
    NSLog(@"data is JSON"); 
}else{ 
    NSLog(@"data is not JSON"); 
} 

if([NSJSONSerialization isValidJSONObject:dict]){ 
    NSLog(@"dict is JSON"); 
}else{ 
    NSLog(@"dict is not JSON"); 
} 

NSLog(@"%@",dict); 

私のログには、次のものが含まれます。

は、ここに私のコードです。このコードを実行するとエラーは発生しませんが、dataを実行すると、isValidJSONObjectが間違った値を返すようです。

isValidJSONObjectをどうすれば正常に動作させることができますか?

+0

これは無駄な動きです: 'dict = [[NSMutableDictionary alloc] init];' –

+0

@HotLicks私はそれをどうお勧めしますか? – Jimmery

+0

OK、私はその行を削除します。アドバイスをいただきありがとうございます。 – Jimmery

答えて

23

isValidJSONObject試験はJSONオブジェクトNSDictionary又はNSArray)正常 がJSONデータに変換することができる場合。

NSDataオブジェクトに有効なJSONデータが含まれているかどうかはテスト用ではありません。有効な JSONデータをテストするために、あなただけの

[NSJSONSerialization JSONObjectWithData:data ...] 

を呼び出し、戻り値がnilであるかどうか確認してください。

+1

ああ、いつものように私は間違っていた! :)応答のためにありがとう。 – Jimmery

+2

これを試しましたが、データが有効なjsonでない場合、JSONObjectWithDataがクラッシュします。 – LuisEspinoza

+2

@LuisEspinoza:私の経験上、JSONObjectWithDataは、データが有効なJSONでない場合はnilを返し、エラーパラメータを設定します。 –

関連する問題