Json转model对象,model转json,解析json字符串
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
- 不处理optional类型,建议写model类时先初始化
- 因为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")!)
}
Json转model对象,model转json,解析json字符串的更多相关文章
- django中ORM的model对象和querryset 简单解析
欢迎大家查看我的博客,我会不定时的用大白话发一些看了就能懂的文章,大家多多支持!如您对此文章内容有独特见解,欢迎与笔者练习一起探讨学习!原创文创!转载请注明出处! ORM是干嘛的? 介绍orm之前我应 ...
- 服务端提供的JSON数据接口与用户端接收解析JSON数据
JSON格式的服务接口:http://www.cnblogs.com/visec479/articles/4118338.html 首先来了解下JSON格式解析 json结构的格式就是若干个 键/值( ...
- json.net(Json.NET - Newtonsoft)利用动态类解析json字符串
将对象转换为字符串很简单,唯一要注意的点就是为了避免循环要在需要的字段上添加jsonignore属性.可以参照这篇博文:http://www.mamicode.com/info-detail-1456 ...
- 【java】JSON.toJSONString 空对象也可以转化为JSON字符串
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...
- Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解
Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...
- C#如何解析JSON数据(反序列化对象)
第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) 第四章:C#如何生成JSON字符串提交给接口 ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- C++解析JSON之JsonCPP
一.JSON简介 JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读.编写.解析. JSON由两种基本结构构成: )"名称/值" ...
- JS 解析JSON实现导序
var chartData = [ { "online": '2013-10-23', "new": 0.00, "login": 0.00 ...
- js中解析json时候的eval和$.parseJSON()的区别以及JSON.stringify()
1.第一个区别是:安全性 json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢? JSON.parse()之可以解 ...
随机推荐
- Android热修复技术原理详解(最新最全版本)
本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...
- 【BZOJ4825】【HNOI2017】单旋(Link-Cut Tree)
[BZOJ4825][HNOI2017]单旋(Link-Cut Tree) 题面 题面太长,懒得粘过来 题解 既然题目让你写Spaly 那就肯定不是正解 这道题目,让你求的是最大/最小值的深度 如果有 ...
- [SDOI2012]Longge的问题
题目大意: 网址:https://www.luogu.org/problemnew/show/P2303 大意:给定一个N,求\(\Sigma_{i=1}^N gcd(i, N);\). 题目解法: ...
- Android Services (后台服务)
一.简介 服务是可以在后台执行长时间运行的应用程序组件,它不提供用户界面. 另一个应用程序组件可以启动一个服务,并且即使用户切换到另一个应用程序,它仍然在后台运行. 另外,组件可以绑定到一个服务来与它 ...
- 关于CoordinatorLayout的用法——复杂交互的克星
好久没有写博客了,主要还是任务过多哈.在开发的过程当中,也记录了很多东西,但是技术这个事吧,其实,时效性真的事非常强--就比如说,你昨天还津津乐道的一个难点解决方案,你过个几天再回过头去看它,就会有一 ...
- Vue2.0 demo:百度百聘第三方web客户端
github地址:https://github.com/axel10/baipin_vue 项目地址:https://vcollection.org/baipin/ 官方的百度百聘客户端存在翻页时过滤 ...
- Oracle GoldenGate实现数据库同步
前言:最近刚好在弄数据库同步,网上查了些资料再加上自己整理了一些,做个分享! 一.GoldenGate的安装 1.安装包准备 数据库版本:Oracle Database 11g Release 2(1 ...
- Spring服务定制
问题总述 我们都知道如果使用Spring来进行bean管理的时候.如果同一个接口的实现类存在两个,直接使用@Autowired注解来实现bean注入,会在启动的时候报异常.我们通常的做法是使用@R ...
- windows下安装Virtualenvwrapper
windows下安装Virtualenvwrapper 我们可以使用Virtualenvwrapper来方便地管理python虚拟环境,但是在windows上安装的时候.....直接 install ...
- C++实现Date日期类
定义一个Date类,包含三个属性年.月.日 实现了如下功能: 年月日的增加.减少:2017年10月1日加上100个月30天是2025年5月31日 输出某天是星期几:2017年10月1日是星期日 判断某 ...