Code Bye

规范的json数据解析不了

服务器是php写的,输出的json格式肯定是对的,用其他工具也是验证过的,编码是utf8的,但是在ios上就是解析不了,解析代码如下
 
 

+(NSDictionary *)DictionaryWithUrl:(NSString *)url
{
    NSError *error;
    //加载一个NSURL对象
    NSString* T_url = [url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
    NSURL* URL=[NSURL URLWithString:T_url];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    //NSLog(@"%@",request);
    //将请求的url数据放到NSData对象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
    NSDictionary* dict= [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:&error];
    NSLog(@"%@",error);
    return dict;
}

json数据是这样的

{"0":[{"name":"编程之美:微软技术面试心得","no":" TP311/BCZ ","borrow":"馆藏复本:6 可借复本:3","author":" 《编程之美》小组著 电子工业出版社 2008 (0) ","url":"item.php?marc_no=0000381253"}]}

解析不了报的错是这样的

2014-07-16 13:00:09.504 Found[10664:60b] Error Domain=NSCocoaErrorDomain Code=3840 “The operation couldn’t be completed. (Cocoa error 3840.)” (Unescaped control character around character 18.) UserInfo=0x17697630 {NSDebugDescription=Unescaped control character around character 18.}

 

上述代码中的NSDictionary*dict得到的值是nil,但是response是有值的。

 

奇怪的是,同样的解析方式,解析同样格式的json是可以正常解析的,甚至,我把本来可以解析的json数据在php页面上输出仍旧解析不了。给我的感觉就似乎是

网页的编码不对,但是查了编码的确是utf8没错,已经纠结我两天了,只能来求各位帮忙

 

还有nserror的code是3840

 


20分
没细看你的代码,这样可以解析:
NSString *testString = @"{"0":[{"name":"编程之美:微软技术面试心得","no":"?TP311/BCZ?","borrow":"馆藏复本:6?可借复本:3","author":"?《编程之美》小组著?电子工业出版社?2008?(0)?","url":"item.php?marc_no=0000381253"}]}";
    NSDictionary *jsonReturn = [NSJSONSerialization JSONObjectWithData:[testString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
确定下是否字符集编码转换的问题
http://www.bejson.com/go.html?u=http://www.bejson.com/jsonview2/可以在这里查看一下你的json是否有错误,如果没有错误,就是解析的问题了,推荐你使用jsonkit第三方类库,
 我也遇到同样的问题 请问楼主目前有解决方案了么  
Unescaped control character around character 18
应该是某个特殊字符串的原因,把服务器返回的NSData转换成字符串看看是不是有换行,回车等特殊字符串,如果与去掉再试试看
楼主你好,可能你的数据中有中文,在转换的时候出现了问题。
把response打印出来看看数据有没有问题

20分
可能有\n,我试过有\n解析失败的,你试试replace掉能不能成功
通过url有可能会带个头文件,是个xml,例如
“<string xmlns=”http://ooppookid/”>{“0”:[{“name”:”编程之美:微软技术面试心得”,”no”:”?TP311/BCZ?”,”borrow”:”馆藏复本:6?可借复本:3″,”author”:”?《编程之美》小组著?电子工业出版社?2008?(0)?”,”url”:”item.php?marc_no=0000381253″}]}</string>”
直接打印response看一下。
http://blog.csdn.net/hwak_07/article/details/12109905建议看看这个
楼主  问题解决否。。我也是同样的问题。。请求过来的NSData 数据有。。但是转换成字符串  或者 字典后就 是NULL   

为什么啊。。。。。。。。同样是JSON格式的数据。。。。。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明规范的json数据解析不了