iOS - 针对JSON数组的NSJSONSerializer解析错误

时间:2014-08-27 11:57:35

标签: ios json rest afnetworking-2 arrays

我正在使用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的解决方案。我查看了hereherehere但没有找到解决方案...

谢谢!

修改

以下是解析错误:

(<invalid>) <error: expected ']' error: 1 errors parsing expression

2 个答案:

答案 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的帮助。