[Xcode 实际操作]七、文件与数据-(17)解析JSON文档
本文将演示如何解析JSON文档。
项目中已添加一份JSON文档:menu.json
1 { 2 "menu": 3 { 4 "id": "file", 5 "value": "File", 6 "menuitem": 7 [ 8 { 9 "value": "New", 10 "onclick": "CreateNewDoc()" 11 }, 12 { 13 "value": "Open", 14 "onclick": "OpenDoc()" 15 }, 16 { 17 "value": "Close", 18 "onclick": "CloseDoc()" 19 } 20 ] 21 } 22 }
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 3 //首先引入文档的解析代理协议XMLParserDelegate, 4 //主要的解析工作,都是靠代理来实现的。 5 class ViewController: UIViewController, XMLParserDelegate { 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additional setup after loading the view, typically from a nib. 10 11 //从项目的目录结构中,读取需要解析的文档, 12 let path = Bundle.main.path(forResource: "menu", ofType: "json") 13 //读取指定位置的文件,并转换为二进制数据 14 if let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path!)) 15 { 16 //添加一条异常捕捉语句,用于将二进制数据转换为字典对象 17 do 18 { 19 //将二进制数据转换为字典对象 20 if let jsonObj:NSDictionary = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions()) as? NSDictionary 21 { 22 //根据键名,获得字典对象中的键值, 23 //并根据键值转换成为另一个字典对象 24 if let menuDic:NSDictionary = jsonObj["menu"] as? NSDictionary 25 { 26 //根据键名,获得第二个字典对象中的键值,并将键值转换成为一个数组对象 27 if let menuItems:NSArray = menuDic["menuitem"] as? NSArray 28 { 29 //遍历数组中的元素,并在控制台打印输出元素的内容 30 for item in menuItems 31 { 32 print("item: \(item)") 33 } 34 } 35 } 36 } 37 } 38 catch 39 { 40 print("Error.") 41 } 42 } 43 } 44 45 override func didReceiveMemoryWarning() { 46 super.didReceiveMemoryWarning() 47 // Dispose of any resources that can be recreated. 48 } 49 }