zoukankan      html  css  js  c++  java
  • [Xcode 实际操作]七、文件与数据-(17)解析JSON文档

    目录:[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 }
  • 相关阅读:
    mysql 查找数组格式的字符串中是否包含某个值
    假期总结
    shell循环结构解析:for/while/case
    ansible笔记(15):循环(二)with_items/with_list/with_together/with_flattened
    ansible笔记(14):循环(一)
    解决报错Failed to start LSB: Bring up/down networking:MAC地址导致
    实现ENSP模拟器与物理主机、虚拟机通信
    zabbix4.2配置监控华为路由器:基于ENSP模拟器
    Grafana展示zabbix监控数据
    zabbix4.2配置监控TCP连接状态
  • 原文地址:https://www.cnblogs.com/strengthen/p/10050129.html
Copyright © 2011-2022 走看看