基于Swift的iOS应用程序开发:解析json格式的数据

一、核心代码

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



猜你喜欢

转载自blog.csdn.net/freezingxu/article/details/77146572
今日推荐