JSON是现在比较流行的文档格式,与xml比,JSON很轻巧。ios sdk中没有JSON的解析库,第三方库SBJson是用的比较多的。
解析下面的JSON数据
{
"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"
}
}
}
}
}
我把它放在了左面上的glossary。json文件中
读取并解析这个文档
NSMutableString *fileName = [NSMutableString stringWithFormat:@"%@%@%@",NSHomeDirectory(),
@"/desktop",@"/glossary.json"];
NSLog(@"%@",fileName);
NSString *jsonStr = [NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",jsonStr);
SBJsonParser *parser = [[SBJsonParser alloc]init];
NSDictionary *json = [parser objectWithString:jsonStr];
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"];
NSString *SortAs = [[[glossDiv objectForKey:@"GlossList"]
objectForKey:@"GlossEntry"]
objectForKey:@"GlossTerm"];
NSLog(@"%@",SortAs);
NSLog(@"Glossary Title : %@",glossaryTitle);
NSLog(@"GlossDic 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 是包含以下部份的資料:
输出结果:
2012-08-29 16:52:13.311 xml[3311:707] Standard Generalized Markup Language
2012-08-29 16:52:13.311 xml[3311:707] Glossary Title : example glossary
2012-08-29 16:52:13.312 xml[3311:707] GlossDic Title : S
2012-08-29 16:52:13.312 xml[3311:707] GlossSeeAlso item 1 : GML
2012-08-29 16:52:13.313 xml[3311:707] GlossSeeAlso item 2 : XML