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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,576评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,515评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,017评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,626评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,625评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,255评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,825评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,729评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,271评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,363评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,498评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,183评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,867评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,338评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,458评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,906评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,507评论 2 359

推荐阅读更多精彩内容