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")!)
}

Json转model对象,model转json,解析json字符串的更多相关文章

  1. django中ORM的model对象和querryset 简单解析

    欢迎大家查看我的博客,我会不定时的用大白话发一些看了就能懂的文章,大家多多支持!如您对此文章内容有独特见解,欢迎与笔者练习一起探讨学习!原创文创!转载请注明出处! ORM是干嘛的? 介绍orm之前我应 ...

  2. 服务端提供的JSON数据接口与用户端接收解析JSON数据

    JSON格式的服务接口:http://www.cnblogs.com/visec479/articles/4118338.html 首先来了解下JSON格式解析 json结构的格式就是若干个 键/值( ...

  3. json.net(Json.NET - Newtonsoft)利用动态类解析json字符串

    将对象转换为字符串很简单,唯一要注意的点就是为了避免循环要在需要的字段上添加jsonignore属性.可以参照这篇博文:http://www.mamicode.com/info-detail-1456 ...

  4. 【java】JSON.toJSONString 空对象也可以转化为JSON字符串

    <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...

  5. Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解

    Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...

  6. C#如何解析JSON数据(反序列化对象)

    第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) 第四章:C#如何生成JSON字符串提交给接口 ...

  7. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. C++解析JSON之JsonCPP

    一.JSON简介 JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读.编写.解析. JSON由两种基本结构构成: )"名称/值" ...

  9. JS 解析JSON实现导序

    var chartData = [ { "online": '2013-10-23', "new": 0.00, "login": 0.00 ...

  10. js中解析json时候的eval和$.parseJSON()的区别以及JSON.stringify()

    1.第一个区别是:安全性 json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢?      JSON.parse()之可以解 ...

随机推荐

  1. ThreadPoolExecutor线程池参数设置技巧

    一.ThreadPoolExecutor的重要参数   corePoolSize:核心线程数 核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线 ...

  2. 【SDOI2009】HH去散步(矩阵快速幂)

    题面 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是 ...

  3. [Luogu3066][USACO12DEC]逃跑的BarnRunning Away From…

    题面 题目描述 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 输入格式: Line 1: 2 integers, N and L (1 <= N <= 2 ...

  4. Spring任务调度定时器

    1.在spring-context.xml配置 <!-- 计划任务配置,用 @Service @Lazy(false)标注类,用@Scheduled(cron = "0 0 2 * * ...

  5. 关于Android attrs 自定义属性的说明

    写个自定义控件时经常要自定义一些自己的属性,平时用的都是那几个,今天就顺便一起总结一下这个东东吧- 一.定义:属性的定义都在attrs.xml文件里面: 二.读取:通过都是通过TypedArray去读 ...

  6. hidden symbol `pthread_atfork'

    gcc交叉编译时发生这种错误 /.. .../voice_demo: hidden symbol `pthread_atfork' in /opt/gcc-linaro-aarch64-linux-g ...

  7. 新手立体四子棋AI教程(1)——基础扫盲

    一.引言 最近身边好几个朋友开始玩立体四子棋,激起了我的好奇心.那么首先来说什么是[立体四子棋],规则又是如何呢? 上图即为立体四子棋,规则类似于五子棋四子连在一起,但是四子棋更加多样.丰富.不仅可以 ...

  8. Junit test使用

    1.导入maven依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</arti ...

  9. [POJ 3635] Full Tank?

    题目 Description 已知每个点的加油站的油价单价(即点权),每条路的长度(边权). 有q个询问,每个询问包括起点s.终点e和油箱容量c. 问从起点走到终点的最小花费.如果不可达输出impos ...

  10. Redis+Restful 构造序列号和压力测试【原创】

    [本人原创],欢迎交流和分享技术,转载请附上如下内容:如果你觉得这篇文章对你有帮助,请记得帮我点赞, 谢谢!作者:kevin[转自]http://www.cnblogs.com/itshare/ 很多 ...