繁体   English   中英

iOS-JSON数组的NSJSONSerializer解析错误

[英]iOS - NSJSONSerializer parsing error for JSON 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的解决方案。 在这里这里这里看过,但没有找到解决方案...

谢谢!

编辑

这是解析错误:

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

您不必序列化该响应,因为它已经被序列化了。 Afnetworking库在内部执行所有这些操作。 只需使用

NSArray *jsonArray = (NSArray *)responseObject;

代替

NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseObject options: NSJSONReadingMutableContainers error: &e];

编辑

访问内部值,例如访问asdf 其他也一样。

NSDictionary *testDic = (NSDictionary *)jsonArray[0];
[testDic objectForKey:@"myattr"];

我找到了解决方案。 我不知道有什么不同,但是现在下面的代码可以正常工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM