我正在爲iPhone編寫本機應用程序,我對這個主題很陌生。
使用AFNetworking我請求(與POST)並處理JSON回覆。
但我注意到,一旦JSON響應更爲複雜:AFNetworking和compex JSON結構
{
"isFound": "YES",
"timestamp": "2013-06-12 22:46:47",
"screenTitle": "Perla Review",
"placeName": "Perla",
"placeUniqueId": "101",
"placeCategory": "PUB",
"username": "@jim",
"userImgURL": "",
"gender": "male",
"infoMsg": "TBD",
"youLike": "Like",
"likesInfoMsg": "",
"revInfoList": [
{
"type": 0,
"data": "",
"text": ""
},
{
"type": 1,
"data": "2",
"text": ""
},
{
"type": 2,
"data": "3",
"text": ""
}
],
"commentsList": []
}
然後AFNetworking無法讀取和構建子陣列(revInfoList & commentsList)。
我做錯了什麼,或AFNetworking不支持這種json結構?
這是我的目標C代碼請求數據和處理回覆:
static NSString *const myAPIBaseURL = @"http://somedomain.com/api/";
NSURL *baseURL = [NSURL URLWithString:[NSString stringWithFormat:myAPIBaseURL]];
NSString *reqPath = @"review/review_fullinfo";
// prepare params
NSString *reqData_loginUsername = [[[Storage_Modal alloc] init] getLoginUsername];
NSString *reqData_currentCoordinatesLat = [[NSNumber numberWithDouble:[appDelegateInst.myCurrentLocation coordinate].latitude] stringValue];
NSString *reqData_currentCoordinatesLon = [[NSNumber numberWithDouble:[appDelegateInst.myCurrentLocation coordinate].longitude] stringValue];
NSString *reqData_reviewUniqueId = reviewUniqueId;
NSDictionary *parameters = [[NSDictionary alloc] initWithObjectsAndKeys:
@"json", @"format",
reqData_loginUsername, @"loginUsername",
reqData_currentCoordinatesLat, @"currentCoordinatesLatitude",
reqData_currentCoordinatesLon, @"currentCoordinatesLongitude",
reqData_reviewUniqueId, @"reviewUniqueId",
nil];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
[client registerHTTPOperationClass:[AFJSONRequestOperation class]];
[client setDefaultHeader:@"Accept" value:@"application/json"];
[client postPath:reqPath parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *xxx = responseObject;
// 'xxx' contains all the top level keys and values, but the sub arrays are empty... why?
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"SERVER ERROR: %@", error);
}
**注:請原諒我,如果有在Objective-C代碼語法錯誤,我不得不從多個功能收集代碼。
謝謝。
您應該向我們展示您用於訪問revInfoList和commentsList的代碼。從你已經顯示的這兩個列表是不清楚的,因爲你的評論暗示 –
@TimDean我正在查看DEBUG中的'responseObject'。我看到'revInfoList'鍵和3個空數組。所以這個問題似乎比訪問密鑰的代碼更基礎。 – thedp
你看到3個「空」數組的事實告訴我,JSON解析器在這裏正確地做了一些事情(因爲你在revInfolist下有3個孩子)。他們應該是NSDictionary對象,而不是NSArray對象,所以我想知道你在「DEBUG」中看到的是什麼(我認爲你的意思是你在XCode的調試器中查看它)。它是否顯示3個類型爲NSArray的對象恰好是空的?根據你在調試器中的看法,它可能根本不是3個空數組。 –