美文网首页基础应用
swift开发笔记:使用SwiftyJSON解析复杂JSON数据

swift开发笔记:使用SwiftyJSON解析复杂JSON数据

作者: 猫留下你走吧 | 来源:发表于2017-10-01 22:50 被阅读99次

    本期JSON解析类型:

    {
        "weatherinfo": {
            "city": "北京",
            "cityid": "101010100",
            "temp": "10",
            "WD": "东南风",
            "WS": "2级",
            "SD": "26%",
            "WSE": "2",
            "time": "10:25",
            "isRadar": "1",
            "Radar": "JC_RADAR_AZ9010_JB",
            "njd": "暂无实况",
            "qy": "1012"
        }
    }
    

    -1- 使用cocoapod安装Alamofire和SwjftyJSON

    swift开发笔记:cocoapods的安装和使用(2017年9月更新)
    swift开发笔记:使用cocoapods导入第三方框架

    -2- 创建网络请求工具类

    封装一个工具类,自然是方便我们每次请求数据的时候可以方便一点,我们将网络请求最基本的参数输入,回调的时候直接可以获取到json数据,就无需第二次检验数据格式是否正确之类的操作。大大方便我们的开发。

    //
    //  NetworkTools.swift
    //  MiaoMiao
    //
    //  Created by liwenban on 2017/9/1.
    //  Copyright © 2017年 hellomiao.cn. All rights reserved.
    //
    
    import UIKit
    import Alamofire
    
    //两种网络请求方式: get / post
    enum MethodType {
        case get
        case post
    }
    
    //封装网络请求工具类
    class NetworkTools: NSObject {
        
        //类方法
        class func requestData(URLString : String, type : MethodType, parameters : [String : Any]? = nil, finishedCallback : @escaping( _ result : Any) -> ()) {
            //将枚举类型的get/post转换成http请求的get/post
            let method = type == .get ? HTTPMethod.get : HTTPMethod.post
            //Alamofire请求方法
            Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in
                //打印数据
                print(response)
                //校检服务器返回的数据类型是否正确
                guard let result = response.result.value else { return }
                //将结果回调出去
                finishedCallback(result)
            }
        }
    }
    

    -3- 记得开启网络请求权限

    屏幕快照 2017-10-01 下午10.39.06.png

    -4- 源代码

    //
    //  ViewController.swift
    //  WeatherDemo
    //
    //  Created by liwenban on 2017/10/1.
    //  Copyright © 2017年 hellomiao.cn. All rights reserved.
    //
    
    import UIKit
    import SwiftyJSON
    
    class ViewController: UIViewController {
    
        //定义控件
        @IBOutlet weak var cityLabel: UILabel!
        @IBOutlet weak var tempLabel: UILabel!
        @IBOutlet weak var WDLabel: UILabel!
        @IBOutlet weak var WSLabel: UILabel!
        @IBOutlet weak var SDLabel: UILabel!
        @IBOutlet weak var timeLabel: UILabel!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
        }
    
        //一个请求数据的按钮触发事件
        @IBAction func getWeather(_ sender: Any) {
            //向一个请求北京天气的接口,方法是用get方法
            NetworkTools.requestData(URLString: "http://www.weather.com.cn/adat/sk/101010100.html", type: .get) { (result : Any) in
                //回调的json数据进行解析,首先获取 键:weatherinfo的值,因为值又是一个json数据,所以再解析其里面的键city,获取就是城市信息
                let city = JSON(result)["weatherinfo"]["city"].string ?? ""
                print(city)
                self.cityLabel.text=city;
                //以此类推
                let temp = JSON(result)["weatherinfo"]["temp"].string ?? ""
                 self.tempLabel.text = temp
                let wd = JSON(result)["weatherinfo"]["WD"].string ?? ""
                self.WDLabel.text=wd
                let ws = JSON(result)["weatherinfo"]["WS"].string ?? ""
                self.WSLabel.text=ws
                let sd = JSON(result)["weatherinfo"]["SD"].string ?? ""
                self.SDLabel.text=sd
                let time = JSON(result)["weatherinfo"]["time"].string ?? ""
                self.timeLabel.text=time
               
            }
        }
    }
    

    因为使用storyboard,附上面定义的一些控件:

    QQ20171001-225847.png

    -4- 效果

    QQ20171001-225044.png

    相关文章

      网友评论

        本文标题:swift开发笔记:使用SwiftyJSON解析复杂JSON数据

        本文链接:https://www.haomeiwen.com/subject/epzaextx.html