基于Swift的iOS应用程序开发:解析json格式的数据
来源:互联网 发布:数据安全交换平台 编辑:程序博客网 时间:2024/05/18 16:54
一、核心代码
1.将json格式的数据转换为对象,原始数据为Data类型的数据:
let jsonObj:AnyObject! = try? JSONSerialization.jsonObject(with: jsonData,options:JSONSerialization.ReadingOptions.allowFragments) as AnyObject
2.解析json属性:
let str:String = jsonObj.object(forKey: "在这里填写属性名称") as! String
3.解析数组:
let arrObj:NSArray = jsonObj.object(forKey: "在这里填写属性名称") as! NSArray
二、示例
2.1、准备工作
我们以以下数据作为示例,对其进行解析:
{ "title": "你好,我是json", "arr": [ { "id": "0001", "name": "动物", "data": [ { "class": "猫", "name": "倒霉的汤姆" }, { "class": "老鼠", "name": "机灵的杰瑞" }, { "class": "狗", "name": "强壮的斯派克" } ] }, { "id": "0002", "name": "职业", "data": [ { "class": "野蛮人", "name": "勇敢的库巴" }, { "class": "圣殿骑士", "name": "英勇的华莱士" } ] } ]}
把这样一段json数据赋值给一个字符串变量,之后的解析代码全部都是针对该变量进行的:
var jsonStr:String = ""
self.jsonStr += "{"self.jsonStr += "\"title\":\"你好,我是json\","self.jsonStr += "\"arr\":["self.jsonStr += "{"self.jsonStr += "\"id\":\"0001\","self.jsonStr += "\"name\":\"动物\","self.jsonStr += "\"data\":["self.jsonStr += "{"self.jsonStr += "\"class\":\"猫\","self.jsonStr += "\"name\":\"倒霉的汤姆\""self.jsonStr += "},"self.jsonStr += "{"self.jsonStr += "\"class\":\"老鼠\","self.jsonStr += "\"name\":\"机灵的杰瑞\""self.jsonStr += "},"self.jsonStr += "{"self.jsonStr += "\"class\":\"狗\","self.jsonStr += "\"name\":\"强壮的斯派克\""self.jsonStr += "}"self.jsonStr += "]"self.jsonStr += "},"self.jsonStr += "{"self.jsonStr += "\"id\":\"0002\","self.jsonStr += "\"name\":\"职业\","self.jsonStr += "\"data\":["self.jsonStr += "{"self.jsonStr += "\"class\":\"野蛮人\","self.jsonStr += "\"name\":\"勇敢的库巴\""self.jsonStr += "},"self.jsonStr += "{"self.jsonStr += "\"class\":\"圣殿骑士\","self.jsonStr += "\"name\":\"英勇的华莱士\""self.jsonStr += "}"self.jsonStr += "]"self.jsonStr += "}"self.jsonStr += "]"self.jsonStr += "}"print("原始数据:"+self.jsonStr)
我们需要把这个String字符串转换为Data格式的数据:
let jsonData:Data = self.jsonStr.data(using: String.Encoding.utf8)!
好了,所有的准备工作都完成了,接下来就是解析的过程了。
2.2、解析
首先将json数据转换为一个内存中的对象:
let jsonObj:AnyObject! = try? JSONSerialization.jsonObject(with: jsonData,options:JSONSerialization.ReadingOptions.allowFragments) as AnyObject注意该对象的数据类型是“AnyObject”
然后我们解析最外层的“title”属性,并打印出它的值:
let title:String = jsonObj.object(forKey: "title") as! Stringprint(title)打印的结果是这样的:
然后,我们解析最外层的数组“arr”:
let arrObj:NSArray = jsonObj.object(forKey: "arr") as! NSArrayprint("我共有\(arrObj.count)个数组元素")打印的结果是这样的:
因为最外层就只有一个“title”和一个数组“arr”,所以接下来就是遍历这个数组了,后续的解析也全部都是使用核心代码来构筑的,所以直接贴出整个解析的过程:
for element in arrObj{ /* * 显示数组元素的顺序 */ print("第\(arrObj.index(of: element))个元素:") /* * 解析并显示数组元素的id */ let id:String = (element as AnyObject).object(forKey:"id") as! String print("id = " + id) /* * 解析并显示数组元素的name */ let name:String = (element as AnyObject).object(forKey:"name") as! String print("name = " + name) /* * 解析并显示数组元素下的数据,这些数据本身也是一个数组 */ let dataArr:NSArray = (element as AnyObject).object(forKey: "data") as! NSArray print("共有\(dataArr.count)个数据项:") for data in dataArr{ /* * 显示数据项的顺序 */ print("第\(dataArr.index(of: data))个数据项:") /* * 解析并显示数据项的类型: */ let cls:String = (data as AnyObject).object(forKey: "class") as! String print("class = " + cls) /* * 解析并显示数据项的名称: */ let nm:String = (data as AnyObject).object(forKey: "name") as! String print("name = " + nm) }}打印的结果如下:
阅读全文
0 0
- 基于Swift的iOS应用程序开发:解析json格式的数据
- iOS开发之JSON格式数据的生成与解析
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(一):显示数据
- 基于Swift的iOS应用程序开发:使用NSUserDefaults存储本地数据
- 基于Swift的iOS应用程序开发:“属性观察器”简介
- Json解析 开发实践 XML和JSON格式的数据
- IOS开发:解析服务器端的json数据
- iOS开发的Json数据解析问题
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(二):删除表格中的数据
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(三):批量处理表格数据
- 解析json格式的数据
- iOS中解析json格式数据的各种方法调用
- iOS --- 使用NSJSONSerialization来解析JSON格式的数据
- iOS中解析json格式数据的各种方法调用
- 基于Swift的iOS应用程序开发:创建Swift与Objective-C之间的桥接头文件
- Socket开发探秘--基于Json格式的数据协议收发
- Socket开发探秘--基于Json格式的数据协议收发
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(四):使用UIRefreshController实现下拉刷新
- 解决百度BMR的spark集群开启slaves结点的问题
- 【 HDUOJ 5053 】 the Sum of Cube 【立方和公式】
- linux free命令详解: cache和buff的区别
- 互联网保险创新之一--组织与结构创新
- ArcGIS License Server10.3利用cmd命令启动方法
- 基于Swift的iOS应用程序开发:解析json格式的数据
- 《java并发编程的艺术》读书笔记
- Android上传图片到七牛云看这篇就够了
- 电解电容封装尺寸图
- 文章标题
- hdu--6105--Gameia
- 1.VMware Workstation 12 中安装CentOS
- Integer常量池
- 相关快捷键