作者benjenq (Ben(憋))
看板MacDev
标题Re: [问题] Json解析时遇到的问题
时间Fri Apr 18 00:31:20 2014
小弟经验值太少,所以回文骗一下PO文数...
首先,这个网址很邪门,问题有三个:
1.拿到的json似乎是有问题的,
不论用哪一种JSON parse都会出错...
2.空白的问题(假设取得的JSON是没问题的),
我也遇到了
3.要选对解码,不然取得的内容也是空白的。
以下内容是解决上述 2跟3 这两个问题...
我猜可能是取得的JSON太大(约4.4MB),
你的Code必须改写,使用非同步的方式,
把JSON的内容逐一 append 到 NSMutableData 变数,
append完成再进行解析,
如下
// .h 内容,宣告变数 NSMutableData
NSMutableData *urlData;
// .m 内容
// 啓用url
NSURL *url = [NSURL URLWithString:@"
http://odata.tn.edu.tw/tnsport.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connectionData = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[connectionData start];
//底下是delegate
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
urlData = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[urlData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSError *jsonParsingError = nil;
// NSString *str = [[NSString alloc] initWithData:urlData
encoding:NSUnicodeStringEncoding];
// 查看JSON内容 NSLog(@"str=%@",str);
id object = [NSJSONSerialization JSONObjectWithData:urlData
options:0
error:&jsonParsingError];
if (jsonParsingError) {
NSLog(@"JSON ERROR: %@", [jsonParsingError localizedDescription]);
} else {
NSLog(@"OBJECT: %@", [object class]);
}
}
//-----说明
这个网址取回的JSON内容,转回文字时得用NSUnicodeStringEncoding
不然看到的也是空白
把data用NSUnicodeStringEncoding转成NSString之後,
就可NSLog观察出已经成功地取回该网站的response内容。
最後把这些内容丢进去解析,则会发生错误的讯息
JSON ERROR: The operation couldn’t be completed. (Cocoa error 3840.)
可以找网址中其他的 OpenData 来练习会比较准确,用你原来的写法就行了。
http://odata.tn.edu.tw/
原本的tnsport.json 网址,本身就一堆问题,
我猜得另外加工处理(例如将内容分段)才能使用。
※ 引述《coolthor (ssssss)》之铭言:
: Dear all
: 有个问题想请教一下,关於Json parse的部份,
: 最近在练习这类型的部分,(因为听说很多open data 的东西都是提供json取资料。 XD)
: 有稍微对Json的格式研究了一下,也知道{}是objec []是阵列,
: 然後去找了有兴趣的json想说磨磨刀,
: 试着挑了几个也算是成功的抓下来,也可以解析。
: 但是在下面这个踢到铁板。
: http://odata.tn.edu.tw/tnsport.json
: NSURL *url = [NSURL URLWithString:@"http://odata.tn.edu.tw/tnsport.json"];
: NSURLRequest *request = [NSURLRequest requestWithURL:url];
: NSData *data = [NSURLConnection sendSynchronousRequest:request
: returningResponse:nil
: error:nil];
: dic = [NSJSONSerialization JSONObjectWithData:data
: options:NSJSONReadingMutableLeaves
: error:&error];
: 不管是用data / dictionary收都只会收到nil。
: (话说NSData本来就是nil,dic也当然是nil XD)
: (原本我还期待收到档案後再去处理可能很多层的部份。 XD)
: 而且这个json里面居然有建table的部份,
: 想请教一下在解析这个json的部份是不是我用错了什麽。 @@
: 感谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.127.156.72
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/MacDev/M.1397752285.A.B46.html
※ 编辑: benjenq (59.127.156.72), 04/18/2014 03:23:32
1F:推 donkeychen:我的浏览器一贴就网页无回应了^^; 04/18 14:19
2F:→ whitefur:因为4.4m的文字档太大了 04/18 15:26