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

本期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- 记得开启网络请求权限

swift开发笔记:使用SwiftyJSON解析复杂JSON数据_第1张图片
屏幕快照 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,附上面定义的一些控件:

swift开发笔记:使用SwiftyJSON解析复杂JSON数据_第2张图片
QQ20171001-225847.png

-4- 效果

swift开发笔记:使用SwiftyJSON解析复杂JSON数据_第3张图片
QQ20171001-225044.png

你可能感兴趣的:(swift开发笔记:使用SwiftyJSON解析复杂JSON数据)