可可错误3840 - NSJSONSerialization

时间:2012-02-14 19:13:54

标签: json nsjsonserialization

我正在尝试解析从ASP.NET Web服务返回的JSON字符串。返回字符串已简化为:

<anyType d1p1:type="q1:string">[{"Firstname":"Johnny"}]</anyType>

当我在xcode中运行以下代码时,我收到错误“Error Domain = NSCocoaErrorDomainCode = 3840”...“JSON文本没有以数组或对象开头,并且选项允许片段未设置”

NSURL *url = [NSURL URLWithString:@"http://webserver.com/Service.asmx/GetNames"];
    NSData *data = [NSData dataWithContentsOfURL:url];
      if(data != nil)
        {
            NSError *error = nil;
            id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
                if(error == nil)
        {
            NSLog(@"%@", result);
        }else{
            NSLog(@"%@",error);
        }
    }else{
        NSLog(@"it's nil");
    }

我不确定该怎么做?错误似乎在“id result =”行上。

*我认为它可能是我的reutrn字符串的格式,但我在ASP.NET帖子上阅读的所有内容都说这是正确的。

*我已将“NSJSONReadingMutableContainers”更改为“NSJSONReadingMutableLeves”

2 个答案:

答案 0 :(得分:6)

Web服务实际上是在文档内容中返回该字符串的<anyType d1p1:type="q1:string"></anyType>部分吗?如果是这样,那就是问题:有效的JSON字符串就是:

[{"Firstname":"Johnny"}]

这是您的Web响应应包含的唯一内容。有角度的括号中的所有东西实际上都不是JSON数据,而是关闭了解析器。

答案 1 :(得分:2)

试试这个希望它会起作用

if ([operation isKindOfClass:[AFJSONRequestOperation class]] && [operation respondsToSelector:@selector(setJSONReadingOptions:)]) {
    ((AFJSONRequestOperation *)operation).JSONReadingOptions = NSJSONReadingAllowFragments;
}
[httpClient enqueueHTTPRequestOperation:operation];