更新:已添加用于访问整个底层JSON字典的类变量NKJSON.rootKey
。请参阅 示例6 了解详情
#NKJSON ######您曾缺失的用于那些讨厌的JSON数据的Swift类
那么,什么是 NKJSON?它是这样一个简单的JSON类,允许您轻松地将JSON数据解析和映射到您自己的模型对象
######从哪里开始?在此处克隆此仓库,并将 NKJSON.swift 文件导入到您的项目中。就这样!您就可以使用了!
######如何使用?首先,定义您的模型对象。记住!您可以使用任何类型的属性。即使是 数组 和或您自己的对象的 字典
完成这些后,就像您通常做的那样从服务器获取JSON数据,并将其喂给 NKJSON 类。
######示例 想象您从服务器获取以下JSON数据
{
"name": "Mickey",
"id": {
"series": "TC",
"number": 123456
}
}
并希望将其映射到以下自定义类定义为
class UserID {
var series: String!
var number: Int = 0
}
class User {
var name: String!
var id: UserID!
}
使用 NKJSON,您所做的只是让您的类实现如下的 JSONParsable
协议
class UserID: JSONParsable {
var series: String!
var number: Int = 0
required init(JSON: NKJSON) {
series <> JSON["series"]
number <> JSON["number"]
}
}
class User {
var name: String!
var id: UserID!
required init(JSON: NKJSON) {
name <> JSON["name"]
id <*> JSON["id"] // See what this means bellow
}
}
完成后,只需将JSON数据喂给 NKJSON 即可迅速获取您的 User
对象!
let JSONData: NSData! // your JSON data goes here
let user: User = NKJSON.parse(JSONData)
简单吧?我告诉过您了!
######还有更多!是的,还有很多。您可以让 NKJSON 使用JSON数据的根或指定的键解析对象数组。
示例1
JSON数据
[{
"name": "Mickey",
"id": {
"series": "TC",
"number": 123456
}
},
{
"name": "Andu",
"id": {
"series": "JI",
"number": 789012
}
}]
解析它
let JSONData: NSData! // your JSON data hoes here
let users: [User] = NKJSON.parse(JSONData)
示例2
JSON数据
{"data": [
{
"name": "Mickey",
"id": {
"series": "TC",
"number": 123456
}
},
{
"name": "Andu",
"id": {
"series": "JI",
"number": 789012
}
}
]}
解析它
let JSONData: NSData! // your JSON data hoes here
let users: [User] = NKJSON.parse(JSONData, key: "data")
示例3
JSON数据
{
"name": "Mickey",
"id": {
"series": "TC",
"number": 123456
},
"country": {
"id": 123,
"name": "Romania"
},
"languages": [
{
"id": 123,
"name": "English"
},
{
"id": 456,
"name": "Romanian"
}
]
}
class User {
var name: String!
var countryName: String!
var lastLanguageName: String!
required init(JSON: NKJSON) {
name <> JSON["name"]
countryName <> JSON["country.name"] // Yup! You can even do that!
lastLanguageName <> JSON["languages.1.name"] // Even that! Or any other combination for that matter
}
}
解析它
let JSONData: NSData! // your JSON data hoes here
let user: User = NKJSON.parse(JSONData)
示例4
JSON数据
{
"name": "Mickey",
"birthDay": "19.09.1988"
}
class User {
var name: String!
var birthDay: NSDate!
func dateFormatter(object: AnyObject?) -> NSDate? {
if let dateString = object as? String {
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.systemLocale()
dateFormatter.dateFormat = "dd.MM.yyyy"
return dateFormatter.dateFromString(dateString)
}
return nil
}
required init(JSON: NKJSON) {
name <> JSON["name"]
birthDay <> JSON["birthDay"] <<>> dateFormatter
}
}
解析它
let JSONData: NSData! // your JSON data hoes here
let user: User = NKJSON.parse(JSONData)
示例5
JSON数据
{
"data": {
"users": [
{
"name": "Mickey",
"birthDay": "19.09.1988"
},
{
"name": "Andu",
"birthDay": "25.05.1986"
}
]
}
}
class User {
var name: String!
var birthDay: NSDate!
func dateFormatter(object: AnyObject?) -> NSDate? {
if let dateString = object as? String {
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.systemLocale()
dateFormatter.dateFormat = "dd.MM.yyyy"
return dateFormatter.dateFromString(dateString)
}
return nil
}
required init(JSON: NKJSON) {
name <> JSON["name"]
birthDay <> JSON["birthDay"] <<>> dateFormatter
}
}
解析它
let JSONData: NSData! // your JSON data hoes here
let mickey: User = NKJSON.parse(JSONData, key:"data.users.0")
let andu: User = NKJSON.parse(JSONData, key:"data.users.1")
let allUsers: [User] = NKJSON.parse(JSONData, key:"data.users")
示例6
通常使用NKJSON.parse方法初始化JSONParsable对象。但也许有时你只是想得到一个字典、一个数组或其他任何东西,但不是一个JSONParsable
对象。那么请看下面的代码,了解如何做到这一点。
JSON数据
{
"data": {
"users": [
{
"name": "Mickey",
"birthDay": "19.09.1988"
}
]
}
}
解析它
var dictioanry: [String: AnyObject]!
if let JSON = NKJSON.parse(userString) {
var dictionary: [String: AnyObject]!
dictionary <> JSON[NKJSON.rootKey]
}
######那些奇怪的运算符是什么?哦,我看到了!你在关注细节!好吧,这是很简单。这些运算符做了 魔法。这里有几个:
<>
允许您将任何Foundation对象(String
,Int
,Float
等)从JSON数据提取到指定的属性中<*>
允许您将任何JSONParsable
对象从JSON数据提取到指定的属性中<|*|>
允许您将JSON数据中任何JSONParsable
对象的数组提取到指定的属性中<|*|*|>
允许您从JSON数据中提取包含以String
作为键和JSONParsable
对象作为值的字典,并将其添加到指定的属性中<<>>
允许您在将 JSON 数据分配给模型的属性之前,通过数据格式化器处理数据。这对于例如NSDate
属性非常有用(见 示例 4)或您想在分配之前稍微处理一下数据的情况。
## 概述
因此,使用 NKJSON,您可以轻松地将 JSON 解析并映射到对象。您只需遵循以下步骤:
- 让您的模型对象实现
JSONParsable
协议 - 使用上述操作符之一将模型属性映射到 JSON 值
- 将 JSON 数据传递给 NKJSON 并享受它!
请记住!您可以使用点(
.
)表示法来访问 JSON 值的子属性,这在 示例 3 和 示例 5 中可以看到。