Как получить значения из словаря в iOS
Я новичок в iOS. Я создал страницу входа, и все работает нормально. Я использовал JSON для проверки имени пользователя и пароля и получил ответ от сервера в формате словаря. Я хочу извлечь значения из словаря и проверить их в своей программе.
Ответ, который я получаю с сервера:
json: {
error = 0;
msg = "";
value = {
user = false;
};
};
Сначала я хочу проверить, есть ли значение с ключом error
0
или 1
. Затем я хочу проверить значение с помощью клавиши user
. Я не знаю, как это сделать, чтобы проверить это. Может ли кто-нибудь помочь?
Код, который я пробовал, находится ниже:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *respString = [[NSString alloc] initWithData:loginJSONData encoding:NSUTF8StringEncoding];
SBJsonParser *objSBJSONParser = [[SBJsonParser alloc] init];
NSDictionary *json = [[NSDictionary alloc] initWithDictionary:[objSBJsonParser objectWithString:respString]];
NSLog(@"json: %@",json);
NSString *error = [json objectForKey:@"error"];
NSLog(@"error: %@", error);
if ([error isEqualToString:@"o"])
{
NSLog(@"login successful");
}
else
{
NSLog(@"login fail");
}
}
Ответы
Ответ 1
Используя современный Objective-C, доступ к вещам в массивах и словарях становится проще.
Вы должны использовать следующий синтаксис:
id<NSObject> value = dictionary[@"key"];
Аналогично,
id<NSObject> value = array[1]; // 1 is the index
Применяя приведенное выше к вопросу:
NSString *error = json[@"error"];
NSDictionary *value = json[@"value"];
BOOL user = [json[@"value"][@"user"] boolValue];
Как и в приведенной выше строке, вложенность разрешена, но это не очень хорошая практика.
Ответ 2
NSNumber *error = [json objectForKey:@"error"];
if ([error intValue] == 0)
{
NSLog(@"login successful");
NSDictionary *value = [json objectForKey:@"value"];
NSNumber *user = [value objectForKey:@"user"];
if ([user boolValue])
{
NSLog(@"user == true");
}
else
{
NSLog(@"user == false");
}
}
else
{
NSLog(@"login failed");
}
Ответ 3
Словари, которые обычно возвращаются с сервера, будут в качестве пары ключевых значений. если вы ищете доступ к этим значениям, соответствующим ключу, то этот код может помочь вам
NSString *varname = [[NSString alloc]initWithFormat:@"%@",[dictionaryname objectForKey:@"key"]];
Ответ 4
Для получения ошибки значения из словаря JSON
.
NSString *error = [myJSONDicName objectForKey:@"error"];
Для получения пользовательского значения из словаря JSON
.
NSString *error = [[myJSONDicName objectForKey:@"value"] objectForKey:@"user"];
Редакция:
Вам просто нужно изменить В
if ([error isEqualToString:@"o"])
_^_
|
измените 'o'
на '0'
Ответ 5
Вы можете использовать приведенный ниже код
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *respstring = [[NSString alloc]initWithData:loginJsonData encoding:NSUTF8StringEncoding];
NSDictionary *dic = [responseString JSONValue];
NSLog(@"%@",dic);
NSNumber *error = [dic objectForKey:@"error"];
if([error intValue] == 0) {
NSLog(@"login successful");
}
else
{
NSLog(@"login fail");
}
NSString *user = [value objectForKey:@"user"];
BOOL userStatus = [user boolValue];
}