JASOON
是什么?
非常简单,解析 JSON 对象的库。
值在哪里?
提供非常有用的错误信息,让您知道缺少的值在哪里。如果您在解析一个属性至一个对象时,属性不是可选的,错误信息会告诉您属性和对象是什么。不再需要浪费时间调试来查找错误。它还会告诉您错误是否是类型错误。如果您将字符串解析为整型,它将失败,并告诉您在哪里以及为什么。调试 JSON 解析从未如此简单。
真的非常简单易用。
要使用 JSON 创建的对象,只需实现 ExpressibleByJSON
如下
struct Person {
let name: String
let age: Int
}
extension Person: ExpressibleByJSON {
init(_ json: JSON) throws {
self.name = try json <<< "name"
self.age = try json <<< "age"
}
}
然后创建对象
session.dataTaskWithRequest(someRequest) { data, response, error in
if let data = data {
do {
let json = try JSON(data)
let person = try Person(json)
} catch {
//Elevate error...
}
}
}
忘记可选类型。
是的,目前,您可以这样忘记解析 JSON
if let string = json["string"] as? String {
//Do something...
}
JASON 使用运算符进行操作,对于所有类型使用 <<<
,对于可选类型使用 <<<?
。用法很简单,获取 JSON 对象(由 JASON 提供),获取字段。
如果您要一个字符串: let string = try json <<< "name" as String
,(如果在类或结构体中先前声明了类型,则不需要 as 关键字 self.name = try json <<< "name"
)
可选类型也是一样,但使用不抛出错误的可选运算符。 let optionalString: String? = json <<<? "name"
JASON 还会为我们推断类型,任何实现 ExpressibleByJSON
或 ConvertibleFromJSON
的类型都可以解析。这样,您可以解析所有需要解析的类型。这允许我们有嵌套类型,并以最简单的方式解析数组、字典,当然,在失败的情况下会提供我们 非常有用的调试信息
为什么抛出错误? 我们知道某些类型需要一些字段,有些字段不是可选的,当我们遇到这种情况时,为什么我们总是取消可选类型的包装?我们花费大量时间处理这些错误,处理它们,记录一些信息...当类型不是可选的时候,我们不需要可选类型,我们需要非可选类型,所以我们会抛出非常有用的错误。
当我们解析 JSON 对象且解析过程失败时,我们希望能够获取错误信息,例如 所需字段 "name" 未找到
,或 尝试将 String 转换为 Int
,无论什么情况...但我们不仅想要这些信息,当我们制作复杂的带有嵌套对象的请求时,我们也想知道哪个对象失败了。JASON 为我们提供了所有这些数据。当有东西失败时,错误会打印 required field "name" not found at Person.self
之类的信息。
扩展框架类型。
是的,您可以直接解析 Foundation 或任何框架类型。URL 例如,我们希望将字符串直接转换为 URL,那么...
///Create an extension of type implementing ConvertibleFromJSON
extension URL: ConvertibleFromJSON {
/// We only need the method from(_, at:), with this, we create the URL
/// casting the given data, and taking care about possible casting errors.
///
/// at: String its provided to us to bring the possiblity of give information about the parsing object.
public static func from(_ object: Any, at: String) throws -> URL {
guard let string = object as? String else {
throw JASONError.TryingCast(object: object, to: "String", at: at)
}
guard let url = URL(string: string) else {
throw JASONError.TryingCast(object: object, to: "URL", at: at)
}
return url
}
}
您的自定义类型
当我们在嵌套对象中时,我们的对象只需实现 ExpressibleByJSON
,如上所述的 Person
声明。然后我们可以像解析 String
一样解析 Persons
。
let person: Person = try json <<< "person"
不仅如此!如果您想,JASON 还会为您解析人员的数组。当您有一个这样的 JSON...
{
"employees": [{
"name": "Ram",
"email": "[email protected]",
"age": 23
}, {
"name": "Shyam",
"email": "[email protected]",
"age": 28
}, {
"name": "John",
"email": "[email protected]",
"age": 33
}, {
"name": "Bob",
"email": "[email protected]",
"age": 41
}]
}
我们只做这件事
let employees: [Employee] = try json <<< "employees"
并且完成所有的工作。
No key needed
如果你的json数据中没有key,您也可以解析它。
[{
"name": "Ram",
"email": "[email protected]",
"age": 23
}, {
"name": "Shyam",
"email": "[email protected]",
"age": 28
}, {
"name": "John",
"email": "[email protected]",
"age": 33
}, {
"name": "Bob",
"email": "[email protected]",
"age": 41
}]
let employees = try json<<< as [Employee]
安装
JASOON可以通过CocoaPods获得。要安装,只需在您的Podfile中添加以下行
pod "JASOON"
作者
Julián Alonso,[email protected]
许可证
JASON可在MIT许可证下获得。更多信息请参阅LICENSE文件。