您的位置:首页 > 移动开发 > Swift

基于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)
}
}
打印的结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: