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

Posted

技术标签:

【中文标题】如何从 iOS 中的字典中获取值【英文标题】:How to get values from a dictionary in iOS 【发布时间】:2013-11-14 05:14:06 【问题描述】:

我是 ios 的新手。我创建了一个登录页面,一切正常。我使用 JSON 来检查用户名和密码,并以 dictionary 格式从服务器获得响应。我想从 dictionary 中提取值并在我的程序中检查它们。 我从服务器得到的响应是:

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

【问题讨论】:

你看过NSDictionary的文档吗? 是的,我尝试使用 NSDictionary 以及如何以编程方式获取值“false” 发布您尝试过的代码(通过更新您的问题),以便人们可以提供帮助。 我试过的代码是: ***.com/questions/10368303/…检查一下 【参考方案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];

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

【讨论】:

我尝试了上面的代码,但它抛出了异常。你能告诉如何为用户编写代码以获取值“true”或“false”。 所以第一段 json[@"value] 返回我们包含用户属性的 NSDictionaryObject 然后访问 json[@"value"][@"user"] 将返回布尔值作为 NSNumber 对象(至少我认为)然后调用 BoolValue将转换为 BOOL... 我怀疑当我们尝试调用 boolValue 时发生异常,您能粘贴异常吗? [__NSDictionaryM boolValue]:无法识别的选择器发送到实例 0x756a050 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSDictionaryM boolValue]:无法识别的选择器发送到实例 0x756a050”libc+ +abi.dylib: 终止调用抛出异常 单独尝试这些,看看单个调用是否有效;试试json[@"value"][@"user"] 看看对象是什么类型。【参考方案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");

【讨论】:

user 的代码不正确。 json 没有 user 密钥。 移动代码以使用户进入if 语句的“then”部分,您就有了正确的答案。 @rmaddy 我不知道他想在哪里编写代码来检查user 的值,但在if 内部是最合适的。感谢您的建议 我提出这个建议是因为我认为 OP 是这么说的,但在再次阅读后我发现它并不清楚。但是如果没有错误,只检查用户是有意义的。 是的,有道理。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

用于从您的 JSON 字典中获取 error 值。

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

用于从您的 JSON 字典中获取 user 值。

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

已编辑:

你只需要改变你的

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

'o' 更改为'0'

【讨论】:

是的,OP 可以。但是OP是不正确的。这就是 OP 的代码不起作用的原因之一。 @rmaddy - 但在 OP 的情况下.. 他/她只需要检查错误是 01 然后我认为 isEqualToString 是工作。 但是代码会因为NSNumber没有isEqualToString:方法而崩溃。 @rmaddy - NSNumber???抱歉,OP 将其作为 NSString 得到,因此不需要使用 NSNumber.. 正如我所说,OP 是错误的。看看 JSON。 0 不在引号中,不是NSString【参考方案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];
 

【讨论】:

OP 已经有从 JSON 中获取字典的代码。这不是问题。 它仍然没有回答问题。继续前进。

以上是关于如何从 iOS 中的字典中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据ios中的特定键从数组中获取字典

如何从python中的字典列表中获取值?

Java中的Hashtable如何根据值获取键?

SwiftyJson 从字典中的数组中获取值

Python:如何从熊猫系列的字典中获取值

当我只想获取字典中的特定值时,如何解码字典值的 JSON 数组?