swift php json解析,Swift JSON解析

swift4 需要在build settings中把swift 3 @objc inference 设置为on

先看一段JSON数据,这是网络返回的数据

{

"errorCode": "SUCCESS",

"message": "",

"data": {

"dict": {

"id": 3,

"text": "equweiyu"

},

"list": [{

"headId": 0,

"text": "aaa",

}, {

"headId": 1,

"text": "bbb",

}, {

"headId": 2,

"text": "ccc",

}, ],

"page": 0

}

}

经过封装最后使用的效果

// JSON 数据

var json:AnyObject?

//NetDataModel

let netData = json.flatMap(NetDataModel.init)

//[listModel]

let list = (netData?.data?["list"] as? [AnyObject])?.map(listModel.init)

//DataModel

let model = netData?.data.flatMap(DataModel.init)

1. 封装一个JSON解析基类

使用setValuesForKeysWithDictionary方法解析,很简单

class KVCModel: NSObject {

override func setValue(value: AnyObject?, forUndefinedKey key: String) {

}

override func setValue(value: AnyObject?, forKey key: String) {

super.setValue(value, forKey: key)

}

convenience init(json: [String:AnyObject]?) {

self.init()

json.flatMap(self.setValuesForKeysWithDictionary)

}

convenience init(obj:AnyObject?) {

self.init(json: obj as? [String:AnyObject])

}

}

但是要注意setValuesForKeysWithDictionary 对 Int 不友好 要使用NSNumber代替

2. 创建Model继承于基类

class NetDataModel:KVCModel {

var errorCode:String?

var data:AnyObject?

var message:String?

}

class DataModel: KVCModel {

var dict:dictModel?

var list:[listModel]?

var page:NSNumber?

override func setValue(value: AnyObject?, forKey key: String) {

switch key {

case "dict":

self.dict = value.flatMap(dictModel.init)

case "list":

self.list = (value as? [AnyObject])?.map(listModel.init)

default:

super.setValue(value, forKey: key)

}

}

}

class dictModel: KVCModel {

var id:NSNumber?

var text:String?

}

class listModel: KVCModel {

var headId:NSNumber?

var text:String?

}

如果Model的属性是KVCModel 或者[KVCModel] 就在 setValue(value: AnyObject?, forKey key: String) 解析

3. 使用

解析NetDataModel:

let netData = json.flatMap(NetDataModel.init)

解析[listModel]:

let list = (netData?.data?["list"] as? [AnyObject])?.map(listModel.init)

解析DataModel:

let model = netData?.data.flatMap(DataModel.init)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值