如何从iOS中的字典中获取值

时间:2013-11-14 05:14:06

标签: ios objective-c json nsdictionary

我是 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");
    }
}

5 个答案:

答案 0 :(得分:15)

使用现代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];

如上所述,允许嵌套,但这不是一个好习惯。

答案 1 :(得分:3)

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");
}

答案 2 :(得分:2)

通常从服务器返回的字典将作为键值对。如果您正在寻找访问与键对应的这些值,那么这些代码可以帮助您

NSString *varname = [[NSString alloc]initWithFormat:@"%@",[dictionaryname objectForKey:@"key"]];

答案 3 :(得分:1)

JSON字典中获取错误值。

NSString *error = [myJSONDicName objectForKey:@"error"];

JSON字典中获取用户值。

NSString *error = [[myJSONDicName objectForKey:@"value"] objectForKey:@"user"];

<强>编辑:

你只需要改变你的

if ([error isEqualToString:@"o"])
                            _^_
                             |

'o'更改为'0'

答案 4 :(得分:0)

您可以使用以下代码

-(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];
 }