這篇文章開始介紹如何將Model轉(zhuǎn)成JSON
1.生成JSON和JSONString
struct Car: Convertible {
var name: String = "Bently"
var new: Bool = true
var age: Int = 10
var area: Float = 0.12345678
var weight: Double = 0.1234567890123456
var height: Decimal = 0.123456789012345678901234567890123456789
var price: NSDecimalNumber = NSDecimalNumber(string: "0.123456789012345678901234567890123456789")
var minSpeed: Double = 66.66
var maxSpeed: NSNumber = 77.77
var capacity: CGFloat = 88.88
var birthday: Date = Date(timeIntervalSince1970: 1565922866)
var url: URL? = URL(string: "http://520suanfa.com")
}
let car = Car()
// 將模型實例car轉(zhuǎn)為JSON
let json1 = car.kj.JSONObject()
// 也可以調(diào)用全局函數(shù)`JSONObject(from:)`
let json2 = JSONObject(from: car)
// 將模型實例car轉(zhuǎn)為JSONString
let jsonString1 = car.kj.JSONString()
// 也可以調(diào)用全局函數(shù)`JSONString(from:)`
let jsonString2 = JSONString(from: car)
print("json1:\(json1) json2:\(json2) jsonString1:\(jsonString1) jsonString2:\(jsonString2)")
/*
json1:["area": 0.12345678, "minSpeed": 66.66, "url": "http://520suanfa.com", "height": "0.12345678901234569216", "price": "0.123456789012345678901234567890123456789", "new": true, "weight": 0.1234567890123456, "maxSpeed": 77.77, "age": 10, "name": Bently, "capacity": 88.88, "birthday": 1565922866.0] json2:["url": "http://520suanfa.com", "new": true, "weight": 0.1234567890123456, "maxSpeed": 77.77, "area": 0.12345678, "name": Bently, "minSpeed": 66.66, "age": 10, "price": "0.123456789012345678901234567890123456789", "capacity": 88.88, "birthday": 1565922866.0, "height": "0.12345678901234569216"] jsonString1:{"height":"0.12345678901234569216","capacity":88.88,"minSpeed":66.66,"url":"http:\/\/520suanfa.com","price":"0.123456789012345678901234567890123456789","maxSpeed":77.77,"weight":0.1234567890123456,"birthday":1565922866,"age":10,"name":"Bently","new":true,"area":0.12345678} jsonString2:{"minSpeed":66.66,"birthday":1565922866,"weight":0.1234567890123456,"height":"0.12345678901234569216","name":"Bently","price":"0.123456789012345678901234567890123456789","maxSpeed":77.77,"capacity":88.88,"url":"http:\/\/520suanfa.com","area":0.12345678,"new":true,"age":10}
*/
/***************************************************/
// 傳入`true`代表生成格式化的JSONString
let jsonString3 = car.kj.JSONString(prettyPrinted: true)
let jsonString4 = JSONString(from: car, prettyPrinted: true)
print("jsonString3:\(jsonString3) jsonString4:\(jsonString4)")
/*
jsonString3:{
"name" : "Bently",
"weight" : 0.1234567890123456,
"capacity" : 88.88,
"age" : 10,
"new" : true,
"maxSpeed" : 77.77,
"url" : "http:\/\/520suanfa.com",
"height" : "0.12345678901234569216",
"minSpeed" : 66.66,
"area" : 0.12345678,
"price" : "0.123456789012345678901234567890123456789",
"birthday" : 1565922866
} jsonString4:{
"weight" : 0.1234567890123456,
"new" : true,
"capacity" : 88.88,
"maxSpeed" : 77.77,
"price" : "0.123456789012345678901234567890123456789",
"minSpeed" : 66.66,
"url" : "http:\/\/520suanfa.com",
"name" : "Bently",
"height" : "0.12345678901234569216",
"age" : 10,
"birthday" : 1565922866,
"area" : 0.12345678
}
*/
2.模型嵌套
struct Book: Convertible {
var name: String = ""
var price: Double = 0.0
}
struct Car: Convertible {
var name: String = ""
var price: Double = 0.0
}
struct Dog: Convertible {
var name: String = ""
var age: Int = 0
}
struct Person: Convertible {
var name: String = "Jack"
var car: Car? = Car(name: "Bently", price: 106.666)
var books: [Book]? = [
Book(name: "Fast C++", price: 666.6),
Book(name: "Data Structure And Algorithm", price: 666.6),
]
var dogs: [String: Dog]? = [
"dog0": Dog(name: "Wang", age: 5),
"dog1": Dog(name: "ErHa", age: 3),
]
}
let jsonString = Person().kj.JSONString(prettyPrinted: true)
print("jsonString:\(jsonString)")
/*
jsonString:{
"dogs" : {
"dog0" : {
"age" : 5,
"name" : "Wang"
},
"dog1" : {
"age" : 3,
"name" : "ErHa"
}
},
"name" : "Jack",
"car" : {
"price" : 106.666,
"name" : "Bently"
},
"books" : [
{
"name" : "Fast C++",
"price" : 666.6
},
{
"price" : 666.6,
"name" : "Data Structure And Algorithm"
}
]
}
*/
3. Any
struct Book: Convertible {
var name: String = ""
var price: Double = 0.0
}
struct Dog: Convertible {
var name: String = ""
var age: Int = 0
}
struct Person: Convertible {
// `books`也可以是NSArray\NSMutableArray
var books: [Any]? = [
Book(name: "Fast C++", price: 666.6),
Book(name: "Data Structure And Algorithm", price: 666.6),
]
// `dogs`也可以是NSDictionary\NSMutableDictionary
var dogs: [String: Any]? = [
"dog0": Dog(name: "Wang", age: 5),
"dog1": Dog(name: "ErHa", age: 3),
]
}
let jsonString = Person().kj.JSONString()
/*
{
"dogs" : {
"dog1" : {
"age" : 3,
"name" : "ErHa"
},
"dog0" : {
"age" : 5,
"name" : "Wang"
}
},
"books" : [
{
"name" : "Fast C++",
"price" : 666.6
},
{
"price" : 1666.6,
"name" : "Data Structure And Algorithm"
}
]
}
*/
4.Model數(shù)組
struct Car: Convertible {
var name: String = ""
var price: Double = 0.0
}
// `models`也可以是NSArray\NSMutableArray
let models = [
Car(name: "BMW", price: 100.0),
Car(name: "Audi", price: 70.0),
Car(name: "Bently", price: 300.0)
]
let jsonString = models.kj.JSONString(prettyPrinted: true)
print("jsonString:\(jsonString)")
/*
jsonString:[
{
"price" : 100,
"name" : "BMW"
},
{
"price" : 70,
"name" : "Audi"
},
{
"name" : "Bently",
"price" : 300
}
]
*/
5.Key處理
struct Dog: Convertible {
var nickName: String = "Wang"
var price: Double = 100.6
// 可以通過實現(xiàn)`kj_JSONKey`方法自定義最終生成JSON的key
func kj_JSONKey(from property: Property) -> JSONPropertyKey {
switch property.name {
case "nickName": return "_nick_name_"
default: return property.name
}
}
}
let jsonString = Dog().kj.JSONString(prettyPrinted: true)
print("jsonString:\(jsonString)")
/*
jsonString:{
"_nick_name_" : "Wang",
"price" : 100.6
}
*/
6.監(jiān)聽
struct Car: Convertible {
var name: String = "Bently"
var age: Int = 10
// 當(dāng)Model即將開始轉(zhuǎn)換為JSON時調(diào)用
func kj_willConvertToJSON() {
print("Car - kj_willConvertToJSON")
}
// 當(dāng)Model轉(zhuǎn)換JSON完畢時調(diào)用
func kj_didConvertToJSON(json: [String: Any]) {
print("Car - kj_didConvertToJSON", json)
}
}
let jsonString = Car().kj.JSONString(prettyPrinted: true)
print("jsonString:\(jsonString)")
/*
Car - kj_willConvertToJSON
Car - kj_didConvertToJSON ["name": Bently, "age": 10]
jsonString:{
"name" : "Bently",
"age" : 10
}
*/
Swift 字典轉(zhuǎn)模型(KakaJSON) ---1.基本用法
Swift 字典轉(zhuǎn)模型(KakaJSON) ---2.數(shù)據(jù)類型
Swift 字典轉(zhuǎn)模型(KakaJSON) ---3.key處理
Swift 字典轉(zhuǎn)模型(KakaJSON) ---4.動態(tài)模型
Swift KakaJSON 06.---Coding/歸檔/解檔