9

テスト後、[NSJSONSerialization isValidJSONObject:]すでに解析した JSON データに対してのみ肯定を返すことができます[NSJSONSerialization JSONObjectWithData:options:error:]

公式ドキュメントによると:

isValidJSONObject は、特定のオブジェクトを JSON データに変換できるかどうかを示すブール値を返します。

isValidJSONObjectただし、JSON からNSDictionaryに変換しようとしているオブジェクトが正常に変換されるという事実にもかかわらず、NO.

これが私のコードです:

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 is not JSON
dict is JSON

そして、この時点で巨大な NSMutableDictionary オブジェクトである dict の出力。このコードを実行してもエラーは発生しませんが、 でisValidJSONObject実行すると間違った値が返されるようdataです。

どうすればisValidJSONObject期待どおりに仕事をすることができますか?

4

1 に答える 1

26

isValidJSONObjectJSON オブジェクト(NSDictionaryまたは) をJSON データNSArrayに正常に変換できるかどうかをテストします。

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

[NSJSONSerialization JSONObjectWithData:data ...]

戻り値がそうであるかどうかを確認しますnil

于 2013-06-17T14:33:32.143 に答える