[英]Can't parse JSON get from PHP in iOS
我正在開發一個應用程序,需要向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,結果也是有效的。
有什么幫助嗎?
AFNetworking已經為您反序列化了responseObject
,因此您不需要使用NSJSONSerialization
。
崩潰的原因是,當它需要NSData
時,您將反序列化的NSArray
傳遞給NSJSONSerialization
。
另外,當你這樣做時:
NSDictionary *dictionary = [NSJSONSerialization ...
你不會得到一本字典,你會得到一個數組。 你應該只有:
NSArray *users = (NSArray *)responseObject;
NSDictionary *user = [users objectAtIndex:0];
(顯然你需要檢查users
數組count
)
此外,當您使用isValidJSONObject:
,您使用的方法是錯誤的。 它驗證對象是否可以轉換為 JSON,而不是對象是否可以從JSON轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.