我正在使用AFNetworking 2.0
调用REST API并返回有效的JSONArray
,如:
[{"myattr": "asdf"}, {"myattr": "jklo"}]
我使用此位置解析我的responseObject
:
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseObject options: NSJSONReadingMutableContainers error: &e];
奇怪的是我的jSONArray
(在调试器中查找)包含两个对象,但序列化程序抛出了解析错误。会发生的是,一些内部对象属性被剥夺了它们的刻度。例如,我看到:
[{attr: "asdf", attr2: "jklo", "attr3": "tzze"}, ...]
这里奇怪的是,有些属性会保留它们的标记!
毕竟我唯一的想法是(除了这一切都是错误的),序列化程序不会预测JSONArray
而是JSONObject
。
这是我的整个代码:
[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
int statusCode = [operation.response statusCode];
NSError *e = nil;
// NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseObject options: NSJSONReadingMutableContainers error: &e];
NSArray *jsonArray = (NSArray *)responseObject;
NSLog(responseObject);
NSLog(jsonArray);
NSDictionary *testDic = (NSDictionary *)jsonArray[0];
[testDic objectForKey:@"name"];
if (!jsonArray) {
NSLog(@"Error parsing JSON: %@", e);
} else {
for(NSDictionary *item in jsonArray) {
NSLog(@"Item: %@", item);
}
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
所以,毕竟我只是在寻找解析我的JSONArray
的解决方案。我查看了here,here和here但没有找到解决方案...
谢谢!
修改
以下是解析错误:
(<invalid>) <error: expected ']' error: 1 errors parsing expression
答案 0 :(得分:1)
您不必序列化该响应,因为它已经被序列化。 Afnetworking库在内部完成所有这些事情。只需使用
NSArray *jsonArray = (NSArray *)responseObject;
代替
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseObject options: NSJSONReadingMutableContainers error: &e];
访问内部值,例如访问asdf
。其他人也一样。
NSDictionary *testDic = (NSDictionary *)jsonArray[0];
[testDic objectForKey:@"myattr"];
答案 1 :(得分:1)
我找到了解决方案。我不知道有什么不同,但现在下面的代码正在运行:
[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
int statusCode = [operation.response statusCode];
NSMutableArray *result = [[NSMutableArray alloc]init];
NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseObject options:NSJSONReadingMutableContainers error:&e];
if(!jsonArray) {
NSLog(@"Error parsing JSON: %@", e);
}else {
for(NSDictionary *jsonDict in jsonArray) {
for (id key in jsonDict) {
id value = [jsonDict objectForKey:key];
if([key isEqualToString:@"name"]) {
//create my object...
}
}
}
}
感谢@Yogesh Suthar的帮助。