iOSapp的json告示
看到这篇文章,要知道这篇文章告诉你什么,就是对json的解析的一个解释,解析的代码去百度就可以了,OC的、安卓的、JS的等等都很多,但是对于swift语言的小白来说,资料就少之又少,包括一些看不懂的,这篇就是解释,要让小白看懂:
先上代码,这是最基本的获取json形式
let url = NSURL(string: "http://... ...")
let data = NSData(contentsOfURL: url!)
if data != nil {
let dict: NSDictionary = (try! NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)) as! NSDictionary //通过系统的方法来获取json,实际开发中会用到第三方库,如alamofire,为了给小白看(大神不看这篇),用最基本的。。这时取到的json数据是字典
print("得到json数据了")
print(dict) //输出json数据
rst = dict.objectForKey("rst") as! Int //通过key来获取值,经典的键值对形式key-value
ecd = dict.objectForKey("ecd") as! Int
}
看得懂最基本的json,那么实际运用中,我不会只对一个key来取value,如tableview的cell肯定是数组的形式呀,这时候小白已经翻阅了别人的代码看了多遍,仍然不知别人的cell数据从哪里获得,原因就是,一般的做法是将json对象转换为model存了起来,再从model对象去取,这一步转化让很多小白浪费了很多时间。
class consumerDetail: NSObject, DictModelProtocol {
var rst:Int = -1
var total:Int = -1
var rows:[Details]?
class func loadConsumerDetail(completion:(data: consumerDetail?, error: NSError?) -> Void) {
let url = NSURL(string: "http://183.252.21.19:81/bhys/d/api/?apiType=costDetail&rqsJson=%7B%22cardNo%22:%229999000002111%22%7D&sign=123456789")
let data = NSData(contentsOfURL: url!)
// let path = NSBundle.mainBundle().pathForResource("Details", ofType: nil) //这是一开始测试的时候用的本地json数据
// let data = NSData(contentsOfFile: path!)
if data != nil {
let dict: NSDictionary = (try! NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)) as! NSDictionary
let rspJson = dict.objectForKey("rspJson") as! NSDictionary
print("得到json数据了")
let modelTool = DictModelManager.sharedManager //此处的DictModelManager是自定义转换类,类如下文
let data = modelTool.objectWithDictionary(rspJson, cls: consumerDetail.self) as? consumerDetail //得到转换类的字典转对象方法将对象存起来,回调completion返回data数据就是对象,错误不做处理
completion(data: data, error: nil)
}
}
static func customClassMapping() -> [String : String]? {
return ["rows" : "\(Details.self)"] //模型的配对
}
}
class Details:NSObject { //模型,是不是和javabean很像,其实swift和java挺像的,个人觉得
var amount: String?
var orgName: String?
var occurTime: String?
var state:String?
}
下面是viewcontroller,取得data对象后,将其放入模型中,如下
private var detail: consumerDetail?
override func viewDidLoad() {
super.viewDidLoad()
self.title = "消费明细"
setTableView()
consumerDetail.loadConsumerDetail { (data, error) -> Void in
let tmpSelf = self
tmpSelf.detail = data
}
}
当cell获取时就可以轻松得到了
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = detailCellTableViewCell.cellWithTableView(tableView)
let goods = detail?.rows![indexPath.row]
cell.details = goods
print("得到cell")
return cell
}
//自定义转换类
public class DictModelManager {
private static let instance = DictModelManager()
// 全局public统一访问入口
public class var sharedManager: DictModelManager {
return instance
}
// 字典转模型
// - parameter dict: 数据字典
// - parameter cls: 模型类
// - returns: 模型对象
public func objectWithDictionary(dict: NSDictionary, cls: AnyClass) -> AnyObject? {
let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
// 模型信息
let infoDict = fullModelInfo(cls)
let obj: AnyObject = (cls as! NSObject.Type).init()
autoreleasepool { // 3. 遍历字典对
iOSapp的json告示的更多相关文章
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- JSON.parse()和JSON.stringify()
1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...
- json与JavaScript对象互换
1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
随机推荐
- 物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探
物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探 唐朝实验室 · 2015/10/30 10:22 Author: FengGou 0x00 目录 0x00 目录 0x01 前言 0x02 BLE概 ...
- 理解RxJava线程模型
RxJava作为目前一款超火的框架,它便捷的线程切换一直被人们津津乐道,本文从源码的角度,来对RxJava的线程模型做一次深入理解.(注:本文的多处代码都并非原本的RxJava的源码,而是用来说明逻辑 ...
- springMVC,mybatis配置事务
首先应该对context:include-filter和context:exclude-filter有一个了解,include是包含这个,而不是只包含,下面会有例子看看: 这是我最开始配置的MVC的配 ...
- Android Studio - HPROF文件查看和分析工具
Android Studio 翻译的官方文章 原文链接 当你在Android Studio中使用Android Monitor里的Memory Monitor工具监视内存使用情况时,可以把Java堆快 ...
- ubuntu 安装eclipse,adt,android sdk,离线
1.安装jdk 环境变量 $ sudo gedit ~/.bashrc export JAVA_HOME=/usr/local/jdk1.8.0_65export JRE_HOME=${JAVA_HO ...
- Myeclipse 找不到Convert to maven project选项
https://my.oschina.net/u/2419190/blog/504417 Window > Preferences > General > Capabilities ...
- Head First 设计模式--2 观察者模式 解耦
观察者模式定义了对象之间一对多的依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 假如有这么一个项目,监控每天的天气状况WeatherData(温度,湿度,气压).有布告板 ...
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
找了这么久资料,总算解决了 感谢博客园:http://www.cnblogs.com/xsht/p/5275081.html 感谢百度:http://zhidao.baidu.com/link?url ...
- Tomcat下使用war包发布项目
Tomcat下使用war包发布项目 转自<Tomcat下使用war包发布项目 >,地址:http://blog.csdn.net/wy818/article/details/7240294 ...
- hdu 5876 ACM/ICPC Dalian Online 1009 Sparse Graph
题目链接 分析:这叫补图上的BFS,萌新第一次遇到= =.方法很简单,看了别人的代码后,自己也学会了.方法就是开两个集合,一个A表示在下一次bfs中能够到达的点,另一个B就是下一次bfs中到不了的点. ...