无法解析从 iOS 中的 PHP 获取的 JSON
Posted
技术标签:
【中文标题】无法解析从 iOS 中的 PHP 获取的 JSON【英文标题】:Can't parse JSON get from PHP in iOS 【发布时间】:2014-04-10 12:06:02 【问题描述】:我正在开发一个应用程序,该应用程序需要向 Web 服务发送请求并为下一个流程获取 JSON。我正在使用AFNetworking
进行请求。以下是我的 php 代码
$data = array(
array(
'userID' => 'xxx'
)
);
echo json_encode($data);
上面的代码我已经验证过了,打印出来的结果没问题。
["userID":"xxx"]
然后,我使用AFNetworking
发送对这个 Json 数据的请求,如下所示
NSDictionary *parameters = @@"action": @"verifyUDID", @"UDID": udid;
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
[manager POST:@"http://roommateradar.com/RoommateRadarAPI.php"
parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"%@",responseObject);
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
NSLog
正确显示了JSON
数据,但将JSON
解析为 NSDictionary 的下一行将导致崩溃,输出如下所示
2014-04-10 21:59:56.893 RoommateRadar[2941:60b] (
userID = xxx;
)
2014-04-10 21:59:56.893 RoommateRadar[2941:60b] -[__NSCFArray bytes]: unrecognized selector sent to instance 0x1493e660
2014-04-10 21:59:56.895 RoommateRadar[2941:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray bytes]: unrecognized selector sent to instance 0x1493e660'
所以你可以看到 NSLog(@"%@",responseObject);实际上是在显示正确的东西。顺便说一句,我也试过了
[NSJSONSerialization isValidJSONObject:responseObject];
验证responseObject,结果也是有效的。
有什么帮助吗?
【问题讨论】:
因为你是从服务中获取数组所以获取 NSArray *arr = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];然后得到 NSDictionary *dictT = [arr objectAtIndex:0];然后执行 NSLog("%@",dictT)。 【参考方案1】:AFNetworking 已经为您反序列化了responseObject
,因此您无需使用NSJSONSerialization
。
崩溃是因为您将反序列化的NSArray
传递给NSJSONSerialization
,而它需要NSData
。
另外,当你这样做时:
NSDictionary *dictionary = [NSJSONSerialization ...
反正你不会得到字典,你会得到一个数组。你应该有:
NSArray *users = (NSArray *)responseObject;
NSDictionary *user = [users objectAtIndex:0];
(显然你需要检查users
数组count
)
另外,当您使用isValidJSONObject:
时,您的使用方式是错误的。它验证对象是否可以转换为 JSON,而不是对象是否可以从 JSON 转换。
【讨论】:
非常感谢!你是对的,AFNetworking 已经为我反序列化了 JSON。现在我可以从 responseObject 中获取用户 ID。但是,当我尝试从[users objectAtIndex:0]
等 NSArray 用户那里获取用户 ID 时,它再次导致崩溃。相反,I use NSDictionary *users = [responseObject objectAtIndex:0]
然后它适用于 '[users objectForKey:@"userID"]`以上是关于无法解析从 iOS 中的 PHP 获取的 JSON的主要内容,如果未能解决你的问题,请参考以下文章
通过 Ajax 解析 PHP 文件获取的 JSON 数据时出现问题