iphone ios json解析流程,教程

来源:互联网 发布:松露巧克力 知乎 编辑:程序博客网 时间:2024/05/22 12:12
JSON 是現時流行的資料格式,與 XML 相比,JSON 更為輕巧。在傳輸相同資料時,JSON 在大部份情況也會較 XML 的檔案小,在手機網路上傳輸 JSON 亦會比 XML快。
在 iPhone Cocoa Touch Framework 中並沒有 Library 去操作 JSON 資料格式。幸好有一些人為 Objective C 製作了能夠操作 JSON資料格式的 Library
而我使用的是這一款: 
json-framework
下載完成後將整個 JSON 資料夾複製到Project 內,然後那一個 Class 要使用到JSON Library 只要引入 JSON.h 就可以了。

[html] view plaincopyprint?
  1. {  
  2.     "glossary": {  
  3.         "title": "example glossary",  
  4.         "GlossDiv": {  
  5.             "title": "S",  
  6.             "GlossList": {  
  7.                 "GlossEntry": {  
  8.                     "ID": "SGML",  
  9.                     "SortAs": "SGML",  
  10.                     "GlossTerm": "Standard Generalized Markup Language",  
  11.                     "Acronym": "SGML",  
  12.                     "Abbrev": "ISO 8879:1986",  
  13.                     "GlossDef": {  
  14.                         "para": "A meta-markup language, used to create markup languages such as DocBook.",  
  15.                         "GlossSeeAlso": ["GML", "XML"]  
  16.                     },  
  17.                     "GlossSee": "markup"  
  18.                 }  
  19.             }  
  20.         }  
  21.     }  
  22. }  

以上的資料我會放到一個 data.json 的檔案內。
現在讀取這個檔案:

[html] view plaincopyprint?
  1. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"];  
  2.     NSString *jsonStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];  
  3.        
  4.        
  5.     SBJsonParser *parser = [[SBJsonParser alloc] init];  
  6.     NSDictionary *json = [parser objectWithString:jsonStr error:nil];  
  7.        
  8.     NSDictionary *glossary = [json objectForKey:@"glossary"];  
  9.     NSString *glossaryTitle = [glossary objectForKey:@"title"];  
  10.        
  11.     NSDictionary *glossDiv = [glossary objectForKey:@"GlossDiv"];  
  12.     NSString *glossDivTitle = [glossDiv objectForKey:@"title"];  
  13.        
  14.     NSArray *glossSeeAlso = [[[[glossDiv objectForKey:@"GlossList"]   
  15.                                objectForKey: @"GlossEntry"]   
  16.                                     objectForKey: @"GlossDef"]   
  17.                                         objectForKey: @"GlossSeeAlso"];  
  18.        
  19.     NSLog(@"Glossary Title: %@", glossaryTitle);  
  20.     NSLog(@"GlossDiv Title : %@", glossDivTitle);  
  21.        
  22.     NSLog(@"GlossSeeAlso item 1: %@", [glossSeeAlso objectAtIndex:0]);  
  23.     NSLog(@"GlossSeeAlso item 2: %@", [glossSeeAlso objectAtIndex:1]);  

第 2 行是將檔案內容放到 NSString 內。
第 5 行創造一個 JSON Parser,準備將 JSON 字串轉換成 Object
第 6 行將 JSON 字串轉換成 NSDictionary,而這一個 NSDictionary 內的 Object 亦已經被 JSON Parser 轉換成相對應的 Object,例如: NSArrayNSDictionaryNSString 等等。
第 8 行是使用關鍵字 "glossary" 抽取 Object,因為這個 Object 是包含以下部份的資料:

[html] view plaincopyprint?
  1. {  
  2.         "title": "example glossary",  
  3.         "GlossDiv": {  
  4.             "title": "S",  
  5.             "GlossList": {  
  6.                 "GlossEntry": {  
  7.                     "ID": "SGML",  
  8.                     "SortAs": "SGML",  
  9.                     "GlossTerm": "Standard Generalized Markup Language",  
  10.                     "Acronym": "SGML",  
  11.                     "Abbrev": "ISO 8879:1986",  
  12.                     "GlossDef": {  
  13.                         "para": "A meta-markup language, used to create markup languages such as DocBook.",  
  14.                         "GlossSeeAlso": ["GML", "XML"]  
  15.                     },  
  16.                     "GlossSee": "markup"  
  17.                 }  
  18.             }  
  19.         }  
  20.     }  

第 9 行是使用以上的資料再加上關鍵字 "title" 去抽取內容,以上資料加上關鍵字 "title" 內的內容是 "example glossary",所以回傳的 Object 是一個 NSString Object
第 14 行則是抽取 "GlossSeeAlso" 的內容,以內容則是以下這些:

["GML", "XML"]

如你所見,這是一個 Array, 所以回傳的 Object 是一個 NSArray Object

最後打印出來的內容會是以下這些:

[html] view plaincopyprint?
  1. 2010-08-27 15:15:44.003 JSON[47655:207] Glossary Title: example glossary  
  2. 2010-08-27 15:15:44.049 JSON[47655:207] GlossDiv Title : S  
  3. 2010-08-27 15:15:44.050 JSON[47655:207] GlossSeeAlso item 1: GML  
  4. 2010-08-27 15:15:44.050 JSON[47655:207] GlossSeeAlso item 2: XML  
如果 JSON 資料是經由網路去讀取,可以用以下方法:

[html] view plaincopyprint?
  1. NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://pro.ctlok.com/data.json"]];  
  2. NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
  3. NSString *jsonStr = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];  
範例下載: JSON.zip

原创粉丝点击