Re: [問題] Json解析時遇到的問題

看板MacDev作者 (Ben(憋))時間11年前 (2014/04/18 00:31), 11年前編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
小弟經驗值太少,所以回文騙一下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
因為4.4m的文字檔太大了
04/18 15:26, 2F
文章代碼(AID): #1JK07Tj6 (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1JK07Tj6 (MacDev)