基于Swift的iOS应用程序开发:解析json格式的数据
2017-08-13 17:31
711 查看
一、核心代码
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! String print(title)打印的结果是这样的:
然后,我们解析最外层的数组“arr”:
let arrObj:NSArray = jsonObj.object(forKey: "arr") as! NSArray print("我共有\(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) } }打印的结果如下:
相关文章推荐
- iOS开发之JSON格式数据的生成与解析
- 谈谈iOS开发之JSON格式数据的生成与解析
- 基于Swift的iOS应用程序开发:使用NSUserDefaults存储本地数据
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(三):批量处理表格数据
- 转载 -- iOS开发之JSON格式数据的生成与解析
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(二):删除表格中的数据
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(四):使用UIRefreshController实现下拉刷新
- iOS开发之JSON格式数据的生成与解析
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(一):显示数据
- 基于Swift的iOS应用程序开发:字符串String与Data数据类型相互转换
- iOS开发之JSON格式数据的生成与解析
- iOS开发中对JSON解析数据的处理
- iOS开发网络篇—JSON数据的解析
- iOS网络开发——解析与封装JSON数据
- iOS开发的Json数据解析问题
- iOS开发网络篇—JSON数据的解析
- iOS开发-简单解析JSON数据
- ios-day21-02(ios开发之json数据的解析(json的反序列化))
- Android开发 解析JSON数据格式 如何去掉JSON数据文件的BOM头
- IOS开发之——四种方法解析Json数据(转)