Swift笔记32:SwiftyJSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。
官方文档:Using JSON with Custom Types
JSON 介绍:JavaScript Object Notation
SwiftyJSON是一个用于解析JSON数据的Swift库。它提供了简单易用的API,使得解析JSON数据变得更加方便快捷。优点是耦合性低,灵活性高,易用性强。我们可以快速上手使用。缺点是不像Codable或者Mapper那样有明显的映射关系。

查看demo

基本使用

本文中的JSON数据格式
本地文件名:BookList.json

{
  "list": [
    {
      "desc": "资布给回管并转例快真应社斗。需计分很称军次再派非示开。任状般目程公节石达油第易色常表报来。义造手群特做种响必总算政更。能段委百千工则达教图战越。他议她级对和报门各路子至设去见。",
      "name": "蔡平",
      "num": 25
    },
    {
      "desc": "火型己江约统门山强前领周支团京多支。年会选品科还放们约石通次知酸育。团今年县受产共四金识次去号经音统学。当斯几精道口米由究即报热向专较你热。",
      "name": "吴霞",
      "num": 28
    },
}

我们可以通过本地读取文件获取JSON对象,也可以网络获取
本地获取

func readLocalJSON() {
    let json = EasyTestModel.getLocalJSON("BookList", "json")
    updateModel(json)
}

/// 本地获取JSON
static func getLocalJSON(_ forResourceName: String, _ type: String) -> JSON {
    let path = Bundle.main.path(forResource: forResourceName, ofType: type) ?? ""
    var json = JSON()
    do {
        let data: Data = try Data(contentsOf: URL(fileURLWithPath: path))
        json = try JSON(data: data)
        return json
    } catch {
        print("读取本地文件失败:\(error.localizedDescription)")
    }
    return json
}

网络获取

func getNetModel() {
    let url = GlobalConfig.BOOKLIST_URL
    let parameters = ["key": "value"]
    DispatchQueue.global().async {
        Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON(completionHandler: { response in
            // 处理响应结果
            if let value = response.result.value {
                let json = JSON(value)
                self.updateModel(json)
            }
            if let error = response.result.error {
                print("Response error: \(error)")
            }
        })
    }
}

获取了JSON对象后我们可以灵活的操作,可以使用点语法或下标访问JSON数据

let num = element["num"].intValue // 获取名为"num"的整数值
let name = element["name"].stringValue // 获取名为"name"的字符串值
let height = element["height"].doubleValue // 获取名为"height"的浮点数值
let isBook = element["isBook"].boolValue // 获取名为"isBook"的布尔值

也可以封装成对象

struct Book {
    var authorNumber: Int
    var authorName: String
    var desc: String
}

func updateModel(_ json: JSON) {
    let bookArr = json["list"].arrayValue
    for element in bookArr {
        let num = element["num"].intValue
        let name = element["name"].stringValue
        let desc = element["desc"].stringValue
        let book = Book(authorNumber: num, authorName: name, desc: desc)
        bookArray.append(book)
    }
    mTableView.reloadData()
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容