情形分析:
我一般在接受json數(shù)據(jù)時(shí)會(huì)遇到要處理這三種值的情況泳炉。
接受的Json數(shù)據(jù):
{
Address = "";
Area = "<null>";
BindMobile = 18758363317;
CityName = "";
}
處理:
"" :一般表示接受的關(guān)鍵字的值是字符串,但是長(zhǎng)度為0僵缺。比如上面json中的Address
胡桃。
判斷方式:
id address = [entity objectForKey:@"Address"];
if ([address isKindOfClass:[NSString class]]&&[[NSString stringWithFormat:@"%@",address] length]==0) {
NSLog(@"類型是字符串,但是長(zhǎng)度為0");
}
nil :一般表示關(guān)鍵字不存在磕潮,即objectForKey方法返回對(duì)象為空翠胰。比如上面沒有Password
關(guān)鍵字,那么我這么調(diào)用[entity objectForKey:@"Password"]
返回的就是nil自脯。
判斷方式:
id password = [entity objectForKey:@"Password"];
if (!password) {
NSLog(@"對(duì)象不存在");
}
NSNull :定義了一個(gè)單例方法+null之景,用來表示一些不適用nil的情況。比如集合對(duì)象如NSArray和NSDictionary膏潮,要知道集合對(duì)象里的元素不能是nil锻狗。那么如果元素值不存在,比如上面接受的json數(shù)據(jù)中關(guān)鍵字Area 的值,就是用NSNull表示轻纪。
判斷方式:
id area = [entity objectForKey:@"Area"];
if ([area isEqual:[NSNull null]]) {
NSLog(@"值為空");
}
總結(jié):
所以接受一個(gè)json后油额,我們的判斷流程是:
[manager POST:@"http://musicbox.jidait.com/Login" parameters:paramters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
id result = [responseObject objectForKey:@"result"];
if (result) {
NSLog(@"json中存在關(guān)鍵字result");
return;
}
if ([result isEqual:[NSNull null]]) {
NSLog(@"關(guān)鍵字result對(duì)應(yīng)的值非空");
return;
}
if ([[NSString stringWithFormat:@"%@",result] length]==0) {
NSLog(@"關(guān)鍵字result對(duì)應(yīng)的值是字符串,長(zhǎng)度為0");
return;
}
}
流程:(注意要按順序判斷才合適)
1.判斷關(guān)鍵字是否存在刻帚,存在則objectForKey返回非空對(duì)象潦嘶。
2.判斷關(guān)鍵字的值是否為空,用nsnull判斷崇众。
3.判斷關(guān)鍵字是否是NSString對(duì)象掂僵,如果是繼續(xù)判斷長(zhǎng)度是否為0.