为有牺牲多壮志,敢教日月换新天。

[Xcode 实际操作]七、文件与数据-(17)解析JSON文档

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[Swift]Xcode实际操作

本文将演示如何解析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 }

 

posted @ 2018-12-01 16:56  为敢技术  阅读(347)  评论(0编辑  收藏  举报