项目介绍:
《JSONNeverDie 使用指南》
示例
创建一个 Model:
class People: JSONNDModel {
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"
功能
自动映射
-
[x] JSON 到 Model 自动映射
-
[x] 无需 init()
-
[x] 支持多层映射
自动映射文档.
JSON 编码 / 解码
-
[x] 支持所有数据类型: Int, Double, Bool, String, Array
-
[x] 用户体验良好:Xcode 会自动提示所有可选类型
-
[x] 同时支持普通类型(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)
创建一个自动映射 Model
// 从 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
处理 JSON 数组
if let jsonArray = json["array"].array {
for jsonItem in jsonArray {
let value = jsonItem["key"].int
}
}
// 或者可以做的更简单
let value = json["array"].arrayValue[0]["key"].int
Xcode 可以自动提示所有可选类型
从 JSONND 对象得到 JSON 字符串
let string = json.RAW
自定义 mapping
class Good : JSONNDModel {
var des = ""
required init(JSONNDObject json: JSONND) {
super.init(JSONNDObject: json)
self.des = json["description"].stringValue
}
}
自动映射文档
继承自 JSONNDModel 的类的每一个成员变量都需要初始化。
class People: JSONNDModel {
var name = ""
var number = 0
var array = [Int]()
}
多层影射需要在上层的 init() 方法中初始化下层类:
class TestModel: JSONNDModel {
var string = ""
var double = 0.0
var int = 0
var array_values = [Int]()
var array = [ModelOnlyOneKey]()
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 {
var key = 0
}
class Hey: JSONNDModel {
var man: Man!
required init(JSONNDObject json: JSONND) {
super.init(JSONNDObject: json)
self.man = Man(JSONNDObject: json["man"])
}
}
class Man: JSONNDModel {
var hello = false
}