Ich bin neu bei iOS . Ich habe eine Login-Seite erstellt und alles funktioniert gut. Ich habeJSONzur Überprüfung von Benutzername und Passwort verwendet und die Antwort vom Server in einem Dictionary - Format erhalten. Ich möchte die Werte aus dem dictionary extrahieren und sie in meinem Programm überprüfen. Die Antwort, die ich vom Server bekomme, lautet:
json: {
error = 0;
msg = "";
value = {
user = false;
};
};
Zuerst möchte ich überprüfen, ob der Wert mit der Tasteerror
0
oder1
ist. Dann möchte ich den Wert mit der Tasteuser
überprüfen. Ich weiß nicht, wie ich das programmieren soll, um es zu überprüfen. Kann jemand helfen?
Der Code, den ich ausprobiert habe, ist unten:
- (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");
}
}
Mit dem modernen Objective-C wird der Zugriff auf Dinge in Arrays und Wörterbüchern einfacher.
Sie sollten die folgende Syntax verwenden:
id<NSObject> value = dictionary[@"key"];
Ähnlich,
id<NSObject> value = array[1]; // 1 is the index
Anwenden des obigen auf die Frage:
NSString *error = json[@"error"];
NSDictionary *value = json[@"value"];
BOOL user = [json[@"value"][@"user"] boolValue];
Wie in der obigen Zeile ist das Schachteln erlaubt, aber es ist keine gute Praxis.
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");
}
Die Wörterbücher, die normalerweise vom Server zurückgegeben werden, werden als Schlüsselwertpaar verwendet. Wenn Sie auf diese Werte zugreifen möchten, die einem Schlüssel entsprechen, kann Ihnen dieser Code helfen
NSString *varname = [[NSString alloc]initWithFormat:@"%@",[dictionaryname objectForKey:@"key"]];
Für get error value aus Ihrem JSON
Dictionary.
NSString *error = [myJSONDicName objectForKey:@"error"];
Für get user value aus Ihrem JSON
Dictionary.
NSString *error = [[myJSONDicName objectForKey:@"value"] objectForKey:@"user"];
BEARBEITET:
Sie müssen nur in Ihrem ändern
if ([error isEqualToString:@"o"])
_^_
|
'o'
in '0'
ändern
Sie können den folgenden Code verwenden
-(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];
}