NSDictionary 无法读取 web 服务中的数组

Posted

技术标签:

【中文标题】NSDictionary 无法读取 web 服务中的数组【英文标题】:NSDictionary failed to read array in webservice 【发布时间】:2014-08-12 10:31:20 【问题描述】:

我是开发 Xcode 5 的新手,无法通过 php 连接到 SQLServer。 php结果是这样的:

"user":["user_id":"2393", "id":"740049"], "succeed":1

这个网络服务不是我创建的,而是我的团队创建的。我尝试通过 NSLog 跟踪该过程,发现问题是我创建的 NSDictionary 无法读取这种格式。

这是我的 NSDictionary

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:urlData option:NSJONReadingMutableContainers error:&error];
success=[json[@"success"] integerValue];
NSLog(@"Success:%ld", (long)success);

如果我的 NSDictionary 能够读取数据,那么成功应该是 1,但它一直显示 0。我发现问题是我无法在字典中解析该数组。谁能帮我解决这个问题?

【问题讨论】:

检查你的密钥,你使用的是不同的密钥 什么键?抱歉这么个菜鸟问题 【参考方案1】:

您输入了错误的键值。它将是@“成功”。但是你输入@"success"

NSJSONSerialization *jsonData = [NSJSONSerialization JSONObjectWithData: urlData options:NSJSONReadingMutableContainers error:&error];
int success=[[(NSDictionary *)jsonData valueForKey:@"succeed"]integerValue];
NSLog(@"Success:%ld", (long)success);

【讨论】:

【参考方案2】:

错别字:

success=[json[@"succeed"] integerValue];
//              ^^^^^^^

【讨论】:

我之前试过,但这不是问题。改成成功会报错Thread 1 signal SIGABRT @user3932914 这是一个不同的错误,需要一个问题本身。 是的,我知道该错误的原因。我用 SIGABRT 绊倒了一千次,并习惯于修复它。我发现我的问题是我的 NSDictionary 只能获取用户并成功,而不是用户数组中的数组。但我不知道如何解决它 @user3932914 我只能回答向我提出的问题,这是我在您的问题中看到的唯一问题。如果没有更多细节,我无法再添加任何内容,但在您开始使用字典中的正确键之前,您不会取得任何进一步的进展。【参考方案3】:
//returnString is "user":["user_id":"2393", "id":"740049"], "succeed":1;

NSDictionary *response = [returnString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *users =[NSArray alloc]init];
if([[response valueForKey:@"succeed"] integerValue] == 1)
    users = [response valueForKey:@"user"];
for(NSDictionary *user in users)
    NSLog(@"User : %@", user);

样本输出

User: [user_id:2393,id:740049,user_id:2394,id:740050...,user_id:2395,id:740051];

【讨论】:

以上是关于NSDictionary 无法读取 web 服务中的数组的主要内容,如果未能解决你的问题,请参考以下文章

无法创建 Plist 文件。 iOS+NSDictionary+JSON

将 NSData 与 NSDictionary 参数一起传递给 Web 服务

在 Objective-C 中使用 JSON 数据的 NSJSONSerialization 读取 NSDictionary 集的键值

无法从 Flutter Web 读取 .txt 文件

无法从Web服务器读取utf-8缓冲区

无法打开网站web服务器上似乎未安装frontpage服务器扩展 无法读取microsoft internet information server