swift JSON字符串解析 json parse / json decode

来源:互联网 发布:最新网络剧排行榜 编辑:程序博客网 时间:2024/06/05 05:28
这里讲解的是json字符串解析.寻常解析用三方库即可.但是有时,解析出来的数据并不是你想要的.例如返回的数据为一个数组,但是却用json字符串包装的.那么你用原生的或三方库解析出来的数据为一个字符串类型:
["http://www.example.com/uploads/7186d834f55e9bd95754b12ebe6df911.jpg","http://www.example.com/uploads/8bd827dae398640c198f991fe7a877bb.jpg"]

  这里用Swift代码.及解析出来的类型为String类型,本来想用的是数组,但是String缺无法转化为Array类型,我试过去掉两边中括号,并用 “逗号” 分割开.但是没有成功. 这时就需要进一步把解析出的Stirng再解析成数组

    //例如的数据,用一个常量imageJSONStr来接收的       let imageJSONStr = "["http://www.zhuluoxi.com/uploads/7186d834f55e9bd95754b12ebe6df911.jpg","http://www.zhuluoxi.com/uploads/8bd827dae398640c198f991fe7a877bb.jpg"]"       let images = Array<String>() //用来接收解析完成的数组          //字符串编码成json数据        let data:NSData = imageJsonStr.dataUsingEncoding(NSUTF8StringEncoding)!        var img: AnyObject?         do{    //解析json类型数组            try img = NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)        }catch let error as NSError{            print("error: \(error)")        }        images = img as! Array<String>

ok,搞定,images 就是你想要的最终的数组
再来个终极版的,用extension解决,一劳永逸,使用时,一句代码搞定:

extension String {    var parseJSONString: AnyObject? {        var any: AnyObject?        let data = self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)        do{            any = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers)        }catch let error as NSError{            print("error: \(error)")        }        return any    }}

使用时这样:

    let imageJSONStr = "["http://www.zhuluoxi.com/uploads/7186d834f55e9bd95754b12ebe6df911.jpg","http://www.zhuluoxi.com/uploads/8bd827dae398640c198f991fe7a877bb.jpg"]"    let images: Array<String> = imageJSONStr.parseJSONString as! Array<String>      

搞定.一句代码解决.而别别人也可以使用这个方法了.

  最后有个小问题,对于上面extension中的do catch 方法中,不能直接return,哪位高手可以指点小弟一下怎么做,不用 “any” 这个临时变量,直接在do括号中返回

0 1
原创粉丝点击