SwiftyJSON
SwiftyJSON 是一个 Swift 框架,用于消除普通 JSON 序列化中可选链接的需要。
你可以在此处下载: https : //github.com/SwiftyJSON/SwiftyJSON
如果没有 SwiftyJSON,你的代码将如下所示,以查找 JSON 对象中第一本书的名称:
if let jsonObject = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]],
let bookName = (jsonObject[0]["book"] as? [String: AnyObject])?["name"] as? String {
//We can now use the book name
}
在 SwiftyJSON 中,这非常简单:
let json = JSON(data: data)
if let bookName = json[0]["book"]["name"].string {
//We can now use the book name
}
它不需要检查每个字段,因为如果它们中的任何一个无效,它将返回 nil。
要使用 SwiftyJSON,请从 Git 存储库下载正确的版本 - Swift 3 有一个分支。只需将“SwiftyJSON.swift”拖到项目中并导入到你的类中:
import SwiftyJSON
你可以使用以下两个初始值设定项创建 JSON 对象:
let jsonObject = JSON(data: dataObject)
要么
let jsonObject = JSON(jsonObject) //This could be a string in a JSON format for example
要访问你的数据,请使用下标:
let firstObjectInAnArray = jsonObject[0]
let nameOfFirstObject = jsonObject[0]["name"]
然后,你可以将值解析为某种数据类型,这将返回一个可选值:
let nameOfFirstObject = jsonObject[0]["name"].string //This will return the name as a string
let nameOfFirstObject = jsonObject[0]["name"].double //This will return null
你还可以将路径编译为 swift 数组:
let convolutedPath = jsonObject[0]["name"][2]["lastName"]["firstLetter"].string
是相同的:
let convolutedPath = jsonObject[0, "name", 2, "lastName", "firstLetter"].string
SwiftyJSON 还具有打印自己错误的功能:
if let name = json[1337].string {
//You can use the value - it is valid
} else {
print(json[1337].error) // "Array[1337] is out of bounds" - You cant use the value
}
如果需要写入 JSON 对象,可以再次使用下标:
var originalJSON:JSON = ["name": "Jack", "age": 18]
originalJSON["age"] = 25 //This changes the age to 25
originalJSON["surname"] = "Smith" //This creates a new field called "surname" and adds the value to it
如果你需要 JSON 的原始字符串,例如,如果你需要将其写入文件,则可以获取原始值:
if let string = json.rawString() { //This is a String object
//Write the string to a file if you like
}
if let data = json.rawData() { //This is an NSData object
//Send the data to your server if you like
}