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. 遍历字典对??

for (k, v) in infoDict {

if let value: AnyObject = dict[k] {

if v.isEmpty {

if !(value === NSNull()) {

obj.setValue(value, forKey: k)

}

} else {

let type = "\(value.classForCoder)"

if type == "NSDictionary" {

if let subObj: AnyObject = objectWithDictionary(value as! NSDictionary, cls: NSClassFromString(ns + "." + v)!) {

obj.setValue(subObj, forKey: k)

}

} else if type == "NSArray" {

if let subObj: AnyObject = objectsWithArray(value as! NSArray, cls: NSClassFromString(ns + "." + v)!) {

obj.setValue(subObj, forKey: k)

}

}

}

}

}

}

return obj

}

时间: 2024-09-21 03:35:17

iOSapp的json告示的相关文章

Day4 - 迭代器&生成器、装饰器、Json & pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

Node.js 使用angularjs取得Nodejs http服务端返回的JSON数组示例

server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require("http"); // 创建服务器,创建HTTP服务器要调用http.createServer()函数,它只有一个参数,是个回调函数,服务器每次收到http请求后都会调用这个回调函数.服务器每收到一条http请求,都会用新的request和response对象触发请求函数. var server=http.createS

npm5 packag-lock.json

前几天升级了 Node.js v8.0 后,自带的 npm 也升级到了5.0,第一次使用的时候确实惊艳到了:原本重新安装一次模块要十几秒到事情,现在一秒多就搞定了.先不要激动,现在我来大概讲一下 npm 5 的一些大的变化: 使用npm install xxx命令安装模块时,不再需要--save选项,会自动将模块依赖信息保存到 package.json 文件: 安装模块操作(改变 node_modules 文件夹内容)会生成或更新 package-lock.json 文件 发布的模块不会包含 p

JS高程3:JSON

JSON,JavaScript Object Notation,JS对象表示法,是目前最常见的结构化数据传输形式. JSON并非编程语言,而是一种数据结构,像mp4.avi一样,只是一种数据格式而已.(数据结构可以包含很多数据类型) JSON值的类型 简单值 对象 数组 简单值:字符串.数字.布尔值和null,注意不包括undefined. 注意:JSON中的字符串必须用双引号. 对象:对象就是无序的键值对,而键值中的值也可以是简单值.对象或者数组. 注意:JSON中对象的属性必须用双引号括起来

C#如何拿到从http上返回JSON数据?

在实际开发中,我们经常会使用到API,所谓API一般就是一个地址,我们称之为接口.然后我们通过用C#对这地址发送请求,请求后,服务器就会给我们返回数据,一般是XML或者JSON,这里我们主要讲述的是JSON. 为了演示,我们这里准备了一个接口,这是一个查询物流的接口.(读者读到这篇文章的时候,接口可能有效,也可能失效,因为接口是网上找的,不是笔者自己写的,但是原理是一样的.) 接口:  http://www.kuaidi100.com/query?type=快递公司编码&postid=物流单号

JSON 简介

ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JSON 比 XML 更小.更快.更易解析. JSON 实例 { "employee":[ {"firstName":"John","lastName":"Doe"}, {"firstName"

【Struts2】SSH如何返回JSON数据

  在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就是平常的配置 第一种方法是使用com.google.gson.Gson 将对象转化为Json字符串  (gson-1.6.jar) 主要的代码如下 1 package com.javen.tool; 2 3 import java.io.IOException; 4 import java.io.P

JSON 简单例子

代码: json [ { "title" : "a", "num" : 1 }, { "title" : "b", "num" : 1 }, { "title" : "c", "num" : 1 }] 例子1 js var box=[ { title:'a', num:1, height:177, }, { title:'b',

JSON与Javabean转换的几种形式

JSON格式的数据传递是最常用的方法之一,以下列出了常用的几种形态以及与Javabean之间的转换: String json1="{'name':'zhangsan','age':23,'interests':[{'interest':'篮球','colors':['绿色','黄色']},{'interest':'足球','colors':['红色','蓝色']}]}"; String json2="[{'name':'zhangsan'},{'name':'lisi'},{