JSONJam 1.0.0

JSONJam 1.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2015年7月
SPM支持 SPM

Matt Luedke 维护。



JSONJam 1.0.0

  • 作者
  • Matt Luedke

JSONJam

Swift 中的单行 JSON 序列化和反序列化是我的强项。

依赖 JSONHelper 且为与 Alamofire 结合使用而设计。

要求

  • iOS 8+
  • Swift 1.2+

安装

JSONJam 通过 CocoaPods 提供使用。要安装它,请简单地将以下行添加到您的 Podfile 中

platform :ios, '8.0'
use_frameworks!
pod "JSONJam", :git => 'https://github.com/mluedke2/jsonjam.git'

使用

定义模型类

在您的 Swift 模型类中

  • 导入并子类化 JSONJam
  • 定义您模型的自定义属性
  • 重写 propertyMap() 并将您的 JSON 键映射到相关参数(以引用的形式传递参数)

示例

import JSONJam

public class User: JSONJam {

    public var name: String?
    public var favoriteNumber: Int?

    override public func propertyMap() {
        map("name", string: &name)
        map("favorite_number", int: &favoriteNumber)
    }
}

序列化

您可以将自定义对象准备为以下 JSON 格式

// singular
customObject.parameterize()

// plural
customObjects.parameterize()

Alamofire 中的示例

Alamofire.request(.POST, baseURL + "/customObjects", parameters: customObject.parameterize(), encoding: .JSON)

反序列化

您可以将 JSON 对象和数组转换为以下自定义对象

// singular
var customObject: CustomObject?
customObject <-- JSON

// plural
var customObjects: [CustomObject]?
customObjects <-- JSON

Alamofire 示例(在示例网络控制器中)

func getCustomObjects(success:([CustomObject]) -> Void, fail:NetworkError) -> Void {
        Alamofire.request(.GET, baseURL + "/customObjects")
            .responseJSON {(request, response, JSON, error) in
                switch error {
                case .Some(let error):
                    fail(error)
                case .None:
                    var customObjects: [CustomObject]?
                    customObjects <-- JSON
                    if let customObjects = customObjects {
                        success(customObjects)
                    } else {
                        // JSON parsing error
                    }
                }
        }
    }

示例项目

要运行示例项目,请克隆仓库,并在 Example 目录中运行 pod install。它包含测试! :]

附加信息

日期格式

提供与您的 NSDate(或数组)一起的日期格式字符串,它将在序列化和反序列化中使用

import JSONJam

class MyObject: JSONJam {

    var dateFormat = "yyyy-MM-dd HH:mm:ss"

    var creationDate: NSDate?
    var transactionDates: [NSDate]?

    override func propertyMap() {
        map("creation_date", date: &creationDate, dateFormat: dateFormat)
        map("transaction_dates", dateArray: &transactionDates, dateFormat: dateFormat)
    }
}

重写序列化和反序列化

您可以为特定参数重写序列化和反序列化,并为此工作提供闭包。

这对于枚举来说非常有用,例如在示例项目中 ShoeSize

import JSONJam

class ShoeSize: JSONJam {

    enum SizeSystem: String {
        case UnitedStates = "US"
        case Europe = "EUR"
        case UnitedKingdom = "UK"
        case Australia = "AUS"
    }

    var size: Int?
    var sizeSystem: SizeSystem?

    override func propertyMap() {
        map("size", int: &size)
        map("system",
            serializeClosure:{ (inout outgoingParameter: AnyObject?) -> Void in
                outgoingParameter = self.sizeSystem?.rawValue as AnyObject?
            },
            deserializeClosure: { (data: String?) -> Void in
                if let data = data {
                    self.sizeSystem = SizeSystem(rawValue: data)
                }
            }
        )
    }
}

作者

mluedke2, [email protected]

许可证

JSONJam 使用 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。