[Xcode 實際操做]7、文件與數據-(17)解析JSON文檔

目錄:[Swift]Xcode實際操做html

本文將演示如何解析JSON文檔。json

項目中已添加一份JSON文檔:menu.jsonswift

 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 }
相關文章
相關標籤/搜索