欢迎光临
我们一直在努力

JSONNeverDie

建站超值云服务器,限时71元/月

JSONNeverDie

项目介绍:

《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 可以自动提示所有可选类型

pic

从 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
}

code4app

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » JSONNeverDie
分享到: 更多 (0)