zoukankan      html  css  js  c++  java
  • iOS(Swift)学习笔记之SwiftyJSON的使用

    本文为原创文章,转载请标明出处

    1. 通过CocoaPods安装SwiftyJSON

    platform :ios, '10.0'
    
    target '<Your Target Name>' do
    
      use_frameworks!
    
      pod 'SwiftyJSON', '~> 4.0.0'
    
    end
    

    2. 初始化

    import SwiftyJSON
    
    let json = JSON(data: dataFromNetworking)
    
    let json = JSON(jsonObject)
    
    if let dataFromString = jsonString.data(using: .utf8, allowLossyConversion: false) {
        let json = JSON(data: dataFromString)
    }
    

    3. 下标访问

    // 方式1
    let name = json[1]["list"][2]["name"].string
    
    //方式2
    let name = json[1,"list",2,"name"].string
    
    //方式3
    let keys:[JSONSubscriptType] = [1,"list",2,"name"]
    let name = json[keys].string
    
    let arrayNames =  json["users"].arrayValue.map({$0["name"].stringValue})
    

    4. 循环遍历

    不管JSON是数组类型还是字典类型key的类型都为String

    for (key,subJSON) in json {
        ...
    }
    

    5. 错误处理

    枚举类型SwiftyJSONError包含unsupportedTypeindexOutOfBoundselementTooDeepwrongTypenotExistinvalidJSONerrorDomain

    6. 可选值获取

    通过.number.string.bool.int等方法获取到的是可选值。

    if let id = json["user"]["name"].string {
        ...
    } else {
        ...
        print(json["user"]["name"].error!)
    }
    

    7. 非可选值获取

    通过.xxxValue方法获取到的是非可选值。

    // 若不是String或为nil,返回“”
    let name: String = json["name"].stringValue
    

    8. 设置值

    json["name"] = JSON("new-name")
    json[0] = JSON(1)
    
    json["name"].string =  "Jack"
    json.arrayObject = [1,2,3,4]
    json.dictionaryObject = ["name":"Jack", "age":25]
    

    9. 原始数据

    let rawObject: Any = json.object
    let rawValue: Any = json.rawValue
    
    do {
    	let rawData = try json.rawData()
    } catch {
    	print("Error (error)")
    }
    
    if let rawString = json.rawString() {
        ...
    } else {
    	print("json.rawString is nil")
    }
    

    10. 其他方法

    exists

    // 判断是否存在
    if json["name"].exists()
    

    merge

    let original: JSON = [
        "first_name": "Theo",
        "age": 20,
        "skills": ["Coding", "Reading"],
        "address": [
            "street": "Software St",
            "zip": "210046",
        ]
    ]
    
    let update: JSON = [
        "last_name": "Tsao",
        "age": 22,
        "skills": ["Writing"],
        "address": [
            "zip": "210012",
            "city": "Nanjing"
        ]
    ]
    
    let updated = original.merge(with: update)
    

    输出:

    [
        "first_name": "Theo",
        "last_name": "Tsao",
        "age": 22,
        "skills": ["Coding", "Reading", "Writing"],
        "address": [
            "street": "Software St",
            "zip": "210012",
            "city": "Nanjing"
        ]
    ]
    
  • 相关阅读:
    gain 基尼系数
    luogu P5826 【模板】子序列自动机 主席树 vector 二分
    牛客挑战赛39 树与异或 离线 树上莫队 树状数组 约数
    4.22 省选模拟赛 三元组 manacher 回文自动机
    4.22 省选模拟赛 最优价值 网络流 最大权闭合子图
    4.18 省选模拟赛 消息传递 树剖 倍增 线段树维护等比数列
    luogu P4008 [NOI2003]文本编辑器 splay 块状链表
    牛客挑战赛39 密码系统 后缀数组
    luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
    luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
  • 原文地址:https://www.cnblogs.com/metaphors/p/9405432.html
Copyright © 2011-2022 走看看