-
Notifications
You must be signed in to change notification settings - Fork 39
中文文档
John Lui edited this page Oct 13, 2017
·
13 revisions
创建一个 Model:
class People: JSONNDModel {
@objc var name = ""
}
从字符串转换成 JSON 再自动映射为 Model:
let data = "{\"name\": \"JohnLui\"}".dataUsingEncoding(NSUTF8StringEncoding)
let json = JSONND.initWithData(data!)
let people = People(JSONNDObject: json)
print(people.name) // get "JohnLui"
- JSON 到 Model 自动映射
- 无需 init()
- 支持多层映射
- 支持所有数据类型: Int, Double, Bool, String, Array
- 用户体验良好:Xcode 会自动提示所有可选类型
- 同时支持普通类型(Int)和可选类型(Int?)
测试覆盖率接近 100%。
- iOS 7.0+
- Xcode 7
import JSONNeverDie
从网路获得字符串,转化为 JSON:
let data = NSData(contentsOfURL: NSURL(string: "http://httpbin.org/get?hello=world")!)!
let json = JSONND.initWithData(data)
print(json["args"]["hello"].stringValue)
// 从 NSData 初始化
let data = NSData(contentsOfURL: NSURL(string: "http://httpbin.org/get?hello=world")!)!
let json = JSONND.initWithData(data)
// 从 Array 初始化
let arrayJSON = JSONND(array: ["hello", "world", 100])
// 从 Dictionary 初始化
let dictionaryJSON = JSONND(dictionary: ["hello": "world", "hey": "guys"])
let value = json["key"].int
let value = json["key"].intValue
let value = json["key"].string
let value = json["key"].stringValue
let value = json["key"].double
let value = json["key"].doubleValue
let value = json["key"].bool
let value = json["key"].boolValue
let value = json["key"].array
let value = json["key"].arrayValue
// 多层直接获取
let value = json["key"]["key1"]["key2"].int
if let jsonArray = json["array"].array {
for jsonItem in jsonArray {
let value = jsonItem["key"].int
}
}
// 或者可以做的更简单
let value = json["array"].arrayValue[0]["key"].int
let string = json.RAW
class Good : JSONNDModel {
var des = ""
required init(JSONNDObject json: JSONND) {
super.init(JSONNDObject: json)
self.des = json["description"].stringValue
}
}
继承自 JSONNDModel 的类的每一个成员变量都需要初始化。
class People: JSONNDModel {
@objc var name = ""
@objc var number = 0
@objc var array = [Int]()
}
多层影射需要在上层的 init() 方法中初始化下层类:
class TestModel: JSONNDModel {
@objc var string = ""
@objc var double = 0.0
@objc var int = 0
@objc var array_values = [Int]()
@objc var array = [ModelOnlyOneKey]()
@objc var hey: Hey!
required init(JSONNDObject json: JSONND) {
super.init(JSONNDObject: json)
for i in json["array_values"].arrayValue {
self.array_values.append(i.intValue)
}
for i in json["array"].arrayValue {
self.array.append(ModelOnlyOneKey(JSONNDObject: i))
}
self.hey = Hey(JSONNDObject: json["hey"])
}
}
class ModelOnlyOneKey: JSONNDModel {
@objc var key = 0
}
class Hey: JSONNDModel {
@objc var man: Man!
required init(JSONNDObject json: JSONND) {
super.init(JSONNDObject: json)
self.man = Man(JSONNDObject: json["man"])
}
}
class Man: JSONNDModel {
@objc var hello = false
}