SwiftyJSON的使用祥解

原文出处:链接 

GitHub地址

1)比如我们有一个如下的JSON数据,表示联系人集合:


[  {

       "name":"hangge",

        "age": 100,

        "phones": [

                             {

                                 "name":"公司",

                                 "number":"123456"

                             },

                            {

                                 "name":"家庭",

                                  "number":"001"

                            }

                       ]

   },

{

        "name":"big boss",

         "age": 1,

          "phones": [

                              {

                                   "name":"公司",

                                     "number":"111111"

                             }

                         ]

        }

]



2)使用NSJSONSerializationSwiftyJSON解析

if letuserArray = try ? NSJSONSerialization.JSONObjectWithData( jsonData,

options: .AllowFragments)as? [[String:AnyObject]],

let phones = userArray?[0]["phones"] as ?  [[String:AnyObject]],

let number = phones[0]["number"] as ? String{

       // 找到电话号码

        print("第一个联系人的第一个电话号码:",number)

}

3)使用SwiftyJSON解析:

不用担心数组越界,不用判断节点,拆包什么的,代码如下:

let json = JSON(data: jsonData)

if let number = json[0]["phones"][0]["number"].string {

    // 找到电话号码

     print("第一个联系人的第一个电话号码:",number)

}

3,获取网络数据,并使用SwiftyJSON解析

(1)与NSURLSession结合

//创建NSURL对象

 let urlString:String="http://www.hangge.com/getJsonData.php"

 let url:NSURL! =NSURL(string:urlString)

//创建请求对象

let request:NSURLRequest=NSURLRequest(URL: url)

let session =NSURLSession.sharedSession()

let dataTask = session.dataTaskWithRequest(request,

completionHandler: {(data, response, error) ->Voidin

if error !=nil{

print(error?.code)

print(error?.description)

}else{

let json =JSON(data: data!)

if let number = json[0]["phones"][0]["number"].string {

// 找到电话号码

print("第一个联系人的第一个电话号码:",number)

}

}

})as NSURLSessionTask

//使用resume方法启动任务

dataTask.resume()

(2)与Alamofire结合

//创建NSURL对象

let urlString:String="http://www.hangge.com/getJsonData.php"

let url:NSURL! =NSURL(string:urlString)

Alamofire.request(.GET, url).validate().responseJSON { responsein

switch response.result {

case.Success:

if let value = response.result.value {

let json =JSON(value)

if let number = json[0]["phones"][0]["number"].string {

// 找到电话号码

print("第一个联系人的第一个电话号码:",number)

}

}

case.Failure(leterror):

print(error)

}

}

4,获取值

(1)可选值获取(Optional getter)

通过.number、.string、.bool、.int、.uInt、.float、.double、.array、.dictionary、int8、Uint8、int16、Uint16、int32、Uint32、int64、Uint64等方法获取到的是可选择值,我们需要自行判断是否存在,同时不存在的话可以获取具体的错误信息。

//int

if let age = json[0]["age"].int {

    print(age)

}else{

   //打印错误信息

   print(json[0]["age"])

}

//String

if let name = json[0]["name"].string {

  print(name)

}else{

  //打印错误信息

   print(json[0]["name"])

}

(2)不可选值获取(Non-optional getter)

使用xxxValue这样的属性获取值,如果没获取到的话会返回一个默认值。省得我们再判断拆包了。

   //If not a Number or nil, return 0

let  age:Int= json[0]["age"].intValue

   //If not a String or nil, return ""

let name:String= json[0]["name"].stringValue

  //If not a Array or nil, return []

let  list:Array = json[0]["phones"].arrayValue

   //If not a Dictionary or nil, return [:]

let  phone:Dictionary = json[0]["phones"][0].dictionaryValue

原文出自:www.hangge.com转载请保留原文链接:http://www.hangge.com/blog/cache/detail_968.html

你可能感兴趣的:(SwiftyJSON的使用祥解)