JsonObject 0.1.0

JsonObject 0.1.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最后发布2015年4月
SPM支持SPM

Brad Hilton维护。



  • 作者
  • Brad Hilton

JsonObject

神奇的Swift JSON建模框架

在Swift中处理JSON可能会有点痛苦。但是,并不一定。JsonObject可以使您轻松地从JSON字典中初始化Swift类,同时也允许您轻松地将其序列化返回!

基本用法

让我们假设您有一些如下所示的JSON

{"id":"1025", "name":"Tom", "state":"CA"}

只需创建一个类似于以下内容的JsonObject的子类

class User: JsonObject {
    var id: NSNumber?
    var name: String?
    var state: String?
}

现在只要用JSON字典表示初始化我们的模型,就是小菜一碟

let jsonDictionary = (A NSDictionary representation of your JSON Data)
if let user = User(dictionary: jsonDictionary) {
    (Do something with your new user)
}

将您的用户对象转换为JSON字典也是非常容易的

let jsonDictionary = user.dictionary

很简单。

安装

JsonObject可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中

pod 'JsonObject'

模型规范

有三种不同的方式来指定您的属性:默认、可选或必需。

1) 默认:如果您使用默认值设置属性,并且JSON数据没有该属性,则您的默认值将保持您指定的状态。

2) 可选:如果您声明一个可选属性,则在初始化模型后,它可能具有值或没有值。

3) 必需:如果您声明一个隐式解包的属性,则JsonObject将确保初始化时属性有时间,否则初始化将失败。这使您的模型更加安全,并且可以轻松指定哪些字段是必需的。

var defaultString: String = "Hello World" // This string will always have a value with the default being 'Hello World'
var optionalString: String? // This may or may not have a value after initalization
var requiredString: String! // If this property can't be set, then initialization will fail

由于键值编码的工作方式,并非所有类型都可以设置为可选或必需类型。下面列出支持的Swift类型列表

Int // default only
Float // default only
Double // default only
Bool // default only
String // default, optional or required
Array // default, optional or required
Dictionary // default, optional or required

所有NSObject子类(如NSNumber、NSString、NSArray等)都可以表示为默认、可选或必需属性。

键映射

通常JSON数据以下划线方式表示,如下所示

{
    "member_id":"30495", 
    "is_public":true, 
    "account_balance":523.22
}

但我们会希望我们的模型使用camel案,如下所示

class User: JsonObject {
    var memberId: NSNumber!
    var isPublic: Bool = false
    var accountBalance: Float = 0.0
}

为了使JsonObject自动将下划线属性映射到camel案,我们只需实现此协议

class User: JsonObject, MapsUnderscoreCaseToCamelCase {
    var memberId: NSNumber!
    var isPublic: Bool = false
    var accountBalance: Float = 0.0
}

很简单。

JsonMapper

为了支持将JSON值映射到对象属性和反向映射,有一个协议,JsonMapper

protocol JsonMapper {
    func propertyValueFromJsonValue(value: JsonValue) -> AnyObject?
    func jsonValueFromPropertyValue(value: AnyObject) -> JsonValue?
}

JSON值由枚举JsonValue表示

enum JsonValue {
    case String(NSString)
    case Number(NSNumber)
    case Array(NSArray)
    case Dictionary(NSDictionary)
    case Null(NSNull)
}

JsonObject为最常见的类型提供了默认映射器

Int
Float
Double
Bool
String
Array
Dictionary
NSNumber
NSString
NSArray
NSDictionary
JsonObject

您的对象可以包括以下任何属性,包括其他JsonObject,如下所示

class User: JsonObject {
    var id: Int = 0
    var name: String!
    var isPublic: Bool = false
    var isMember: Bool = false
    var accountBalance: Float = 0.00
    var ranking: NSNumber!
    var spouse: User?
    var friends: [User]?
    var metadata: [String:[NSNumber]]?
}

作者

Brad Hilton, [email protected]

许可协议

JsonObject遵循MIT许可证。有关更多信息,请参阅LICENSE文件。