这里讲解的是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括号中返回