我正在尝试解析从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”
答案 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];