GitHub链接:

https://github.com/mozhenhau/D3Json

D3Json

通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般json转换类不能转换自定义对象的问题

只有一个文件:D3Json.swfit

扩展写在addExtension。可以参照扩展

Usage

例子在D3Json的Project里面,写了两个测试,一个是json转单model,一个是转model的list

在playgroud里面也有两个例子,但是playgroud里面,alloc自己定义的model时直接出错,可能是playgroud的bug

只需要一句代码:

var user:User = D3Json.jsonToModel(json, objc: User())就可以把json数据转换成User类

转成list对象:

var user:Array = D3Json.jsonToModelList(jsons, objc:User())就可以把json数据转换成Array类

Problem

  1. 不处理optional类型,建议写model类时先初始化
  2. 因为swift的反射reflect的缺陷,父类的属性不能转换

Requirements

  • iOS 7.0+ / Mac OS X 10.9+
  • Xcode 6.1
  • Integration
  • CocoaPods (iOS 8+, OS X 10.9+)

2.model对象转回Json

let data : NSData! = try? NSJSONSerialization.dataWithJSONObject(user, options: [])
model对象转Json,使用自带的NSJSONSerialization:
转载地址:http://www.hangge.com/blog/cache/detail_647.html import UIKit class ViewController: UIViewController { override func viewDidLoad() {
super.viewDidLoad() let label:UILabel = UILabel(frame:CGRectMake(100, 100,300,100));
label.text = "输出结果在控制台"
self.view.addSubview(label)
//测试结果在output终端输入,也可以建个命令行应用测试就可以了
testJson()
} override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
} //测试json
func testJson() {
//Swift对象
let user = [
"uname": "张三",
"tel": ["mobile": "138", "home": "010"]
]
//首先判断能不能转换
if (!NSJSONSerialization.isValidJSONObject(user)) {
print("is not a valid json object")
return
}
//利用OC的json库转换成OC的NSData,
//如果设置options为NSJSONWritingOptions.PrettyPrinted,则打印格式更好阅读
let data : NSData! = try? NSJSONSerialization.dataWithJSONObject(user, options: [])
//NSData转换成NSString打印输出
let str = NSString(data:data, encoding: NSUTF8StringEncoding)
//输出json字符串
print("Json Str:"); print(str) //把NSData对象转换回JSON对象
let json : AnyObject! = try? NSJSONSerialization
.JSONObjectWithData(data, options:NSJSONReadingOptions.AllowFragments)
print("Json Object:"); print(json)
//验证JSON对象可用性
let uname : AnyObject = json.objectForKey("uname")!
let mobile : AnyObject = json.objectForKey("tel")!.objectForKey("mobile")!
print("get Json Object:"); print("uname: \(uname), mobile: \(mobile)")
}
}

3.解析json字符串

(由于是字符串内容是json数组,则转成NSArray。如果字符串是json对象,则转成NSDictionary。)

let string: NSString = "[{\"ID\":1,\"Name\":\"元台禅寺\",\"LineID\":1},{\"ID\":2,\"Name\":\"田坞里山塘\",\"LineID\":1},{\"ID\":3,\"Name\":\"滴水石\",\"LineID\":1}]"
let data = string.dataUsingEncoding(NSUTF8StringEncoding) let jsonArr = try! NSJSONSerialization.JSONObjectWithData(data!,
options: NSJSONReadingOptions.MutableContainers) as! NSArray print("记录数:\(jsonArr.count)")
for json in jsonArr {
print("ID:", json.objectForKey("ID")!, " Name:", json.objectForKey("Name")!)
}

最新文章

  1. Gson---简单入门
  2. keepalived衡环境搭建
  3. easyui 》 radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
  4. Android android:gravity属性介绍及效果图
  5. windows git的安装配置(转)
  6. javaSE第七天
  7. -webkit-filter属性用来干什么
  8. grep比较两个文本相同不同行
  9. 2014 Multi-University Training Contest 1 — D. Task
  10. iOS开发——获取手机当前WiFi名和MAC地址
  11. hdu3416 Marriage Match IV(最短路+网络流)
  12. call of overloaded 'xxx' is ambiguous
  13. 1024MySQL事物提交机制
  14. BZOJ_1031_[JSOI2007]字符加密Cipher_后缀数组
  15. keeping.py
  16. java笔记 -- GregorianCalendar和DateFormateSymbols 类方法
  17. 【IDEA】【4】遇到的问题
  18. Selenium3 + Python3自动化测试系列五——常用断言Assertion
  19. [游戏数据分析]WAU模型简介及WAU预测
  20. 【代码审计】Cscms_v4.1 任意文件删除漏洞实例

热门文章

  1. Redis入门必读,The Little Redis Book中文版
  2. 【BZOJ4552】排序(线段树,二分答案)
  3. 前端综合学习笔记---异步、ES6/7、Module、Promise同步 vs 异步
  4. 【learning】kd-tree
  5. 关系型数据库工作原理-查询优化器(翻译自Coding-Geek文章)
  6. gulp详细入门
  7. 大数据量情况下高效比较两个list
  8. Hadoop 2.6.0-cdh5.4.0集群环境搭建和Apache-Hive、Sqoop的安装
  9. 基于Avocado 的 QData MySQL自动化测试.md
  10. python 全栈开发,Day5