iOS(Swift)学习笔记之SwiftyJSON的使用

白昼怎懂夜的黑 提交于 2019-12-10 09:25:17

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

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"
    ]
]
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!