基于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
原创粉丝点击