您的位置:首页 > 移动开发 > IOS开发

iphone ios json解析流程,教程

2012-06-12 10:41 316 查看
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 就可以了。
{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}
以上的資料我會放到一個 data.json 的檔案內。

現在讀取這個檔案:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"];
    NSString *jsonStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
     
     
    SBJsonParser *parser = [[SBJsonParser alloc] init];
    NSDictionary *json = [parser objectWithString:jsonStr error:nil];
     
    NSDictionary *glossary = [json objectForKey:@"glossary"];
    NSString *glossaryTitle = [glossary objectForKey:@"title"];
     
    NSDictionary *glossDiv = [glossary objectForKey:@"GlossDiv"];
    NSString *glossDivTitle = [glossDiv objectForKey:@"title"];
     
    NSArray *glossSeeAlso = [[[[glossDiv objectForKey:@"GlossList"] 
                               objectForKey: @"GlossEntry"] 
                                    objectForKey: @"GlossDef"] 
                                        objectForKey: @"GlossSeeAlso"];
     
    NSLog(@"Glossary Title: %@", glossaryTitle);
    NSLog(@"GlossDiv Title : %@", glossDivTitle);
     
    NSLog(@"GlossSeeAlso item 1: %@", [glossSeeAlso objectAtIndex:0]);
    NSLog(@"GlossSeeAlso item 2: %@", [glossSeeAlso objectAtIndex:1]);


第 2 行是將檔案內容放到 NSString 內。

第 5 行創造一個 JSON Parser,準備將 JSON 字串轉換成 Object

第 6 行將 JSON 字串轉換成 NSDictionary,而這一個 NSDictionary 內的 Object 亦已經被 JSON Parser 轉換成相對應的 Object,例如: NSArray, NSDictionary, NSString 等等。

第 8 行是使用關鍵字 "glossary" 抽取 Object,因為這個 Object 是包含以下部份的資料:
{
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }


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

第 14 行則是抽取 "GlossSeeAlso" 的內容,以內容則是以下這些:

["GML", "XML"]

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

最後打印出來的內容會是以下這些:
2010-08-27 15:15:44.003 JSON[47655:207] Glossary Title: example glossary
2010-08-27 15:15:44.049 JSON[47655:207] GlossDiv Title : S
2010-08-27 15:15:44.050 JSON[47655:207] GlossSeeAlso item 1: GML
2010-08-27 15:15:44.050 JSON[47655:207] GlossSeeAlso item 2: XML


如果 JSON 資料是經由網路去讀取,可以用以下方法:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://pro.ctlok.com/data.json"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];


转帖:http://blog.csdn.net/linzhiji/article/details/6833884
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐