Swift网络请求与JSON之GET

需求:1,带header。2,接收的是json数据。如图所示

get.png
1,下面将获取“result”值
import Foundation
import Network

class DeviceCtrl: ObservableObject {
    //URL,,改成你的
    private static var thingsCloud = "https://pi.iot-api.com/app/device/v1/teabvlq/attributes"
    //调用该方法就会进行网络请求
    func getJSON() {
        guard let thingsCloud = URL(string: Self.thingsCloud) else { return }
        var request = URLRequest(url: thingsCloud)
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")  //header1
        request.addValue("tCfWNEZ", forHTTPHeaderField: "Project-Key")        //header2
        request.httpMethod = "GET" 
        
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            if(data != nil) {
                if let json = try? JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as? [String : Any] {
                    let resultJSON = json["result"]! as AnyObject  //这里是关键
                    print(resultJSON)    //打印出来就是1了
                }
            } else {
                print("数据是空的")
            }
        }
        task.resume()
    }
2,下面将获取“attributes”里面的任意一个值,以temperature为例
import Foundation
import Network

class DeviceCtrl: ObservableObject {
    //替换你的
    private static var thingsCloud = "https://gpi.iot-api.com/app/device/v1/teabclq/attributes"
    
    func getJSON() {
        guard let thingsCloud = URL(string: Self.thingsCloud) else { return }
        
        var request = URLRequest(url: thingsCloud)
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")  //替换你的header1
        request.addValue("tCfWNEZ", forHTTPHeaderField: "Project-Key")//替换你的header2
        request.httpMethod = "GET"
        
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            if(data != nil) {
                if let json = try? JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as? [String : Any] {
                    let attributesJSON = json["attributes"]! as AnyObject
                    //获取attributes里面的数据
                    if let nodeJSON = try? JSONSerialization.data(withJSONObject: attributesJSON, options: []) {
                        let node =  try? JSONSerialization.jsonObject(with: nodeJSON, options: .mutableContainers) as AnyObject
                        //关键点来了,这里是获取temperature
                        print("\(String(describing: node!["temperature"]))")
                    }
                }
            } else {
                print("数据是空的")
            }
        }
        task.resume()
    }
posted @   skypang  阅读(31)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示