我正在为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个空数组。 –