NKJSON 6.0.0

NKJSON 6.0.0

测试测试
Lang语言 SwiftSwift
许可 MIT
发布最新版本2020年4月
SPM支持SPM

Mihai Fratu维护。



NKJSON 6.0.0

更新:已添加用于访问整个底层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对象(StringIntFloat等)从JSON数据提取到指定的属性中
  • <*> 允许您将任何 JSONParsable 对象从JSON数据提取到指定的属性中
  • <|*|> 允许您将JSON数据中任何 JSONParsable 对象的数组提取到指定的属性中
  • <|*|*|> 允许您从JSON数据中提取包含以 String 作为键和 JSONParsable 对象作为值的字典,并将其添加到指定的属性中
  • <<>> 允许您在将 JSON 数据分配给模型的属性之前,通过数据格式化器处理数据。这对于例如 NSDate 属性非常有用(见 示例 4)或您想在分配之前稍微处理一下数据的情况。

## 概述

因此,使用 NKJSON,您可以轻松地将 JSON 解析并映射到对象。您只需遵循以下步骤:

  1. 让您的模型对象实现 JSONParsable 协议
  2. 使用上述操作符之一将模型属性映射到 JSON 值
  3. 将 JSON 数据传递给 NKJSON 并享受它!

请记住!您可以使用点(.)表示法来访问 JSON 值的子属性,这在 示例 3示例 5 中可以看到。