JASOON 0.1.2

JASOON 0.1.2

测试已测试
语言Swift SwiftSwift
许可证 MIT
发布日期上次发布2018 年 9 月
SPM支持 SPM

Julian Alonso 维护。



JASOON 0.1.2

JASOON

Version License

是什么?

非常简单,解析 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 还会为我们推断类型,任何实现 ExpressibleByJSONConvertibleFromJSON 的类型都可以解析。这样,您可以解析所有需要解析的类型。这允许我们有嵌套类型,并以最简单的方式解析数组、字典,当然,在失败的情况下会提供我们 非常有用的调试信息

为什么抛出错误? 我们知道某些类型需要一些字段,有些字段不是可选的,当我们遇到这种情况时,为什么我们总是取消可选类型的包装?我们花费大量时间处理这些错误,处理它们,记录一些信息...当类型不是可选的时候,我们不需要可选类型,我们需要非可选类型,所以我们会抛出非常有用的错误。

当我们解析 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文件。