您的位置:首页 > 移动开发 > Swift

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

2016-02-27 15:06 477 查看
这里讲解的是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括号中返回
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息