Как получить значения из словаря в 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];
 }