Re: [問題] Json解析時遇到的問題
小弟經驗值太少,所以回文騙一下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://www.ptt.cc/bbs/MacDev/M.1397752285.A.B46.html
※ 編輯: benjenq (59.127.156.72), 04/18/2014 03:23:32
推
04/18 14:19, , 1F
04/18 14:19, 1F
→
04/18 15:26, , 2F
04/18 15:26, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章