做过App通讯的基本上都知道最常用的格式是json和xml,不过现在xml用的越来越少了。主要是因为xml生成和通讯数据量稍大于json,而且json格式直观性比xml更强。所以现在基本上都是在用json格式。在本篇Swift开发学习中,我们就以系统自带的API来解析Json,本人的原则是尽量使用官方的,比第三方更专业,对吧!。第三方可能编写更简单,但是殊不知如果人家的有BUG,你可能都不知道是哪里出的问题。最后还得花更多的时候找BUG出现在哪里!
为了方便测试,我自己在服务器上定义了一个简单的接口,php写的。源码如下(有条件的可以自己试试,写写简单的几个接口):
文件格式我保存的是UTF-8格式,所以我们获取到的数据编码格式也是UTF-8的。如果你用GBK解析肯定中文是乱码或者还会出错。然后下面是http通讯代码
调用方法如下:
最后就是解析方法:
上图有真相:
最后再补充两个别人的代码,一个是读取,一个是写入。不过最后的参数和我用的不一样。可能是Swift版本不同。
先来看写入
再来看解析
为了方便测试,我自己在服务器上定义了一个简单的接口,php写的。源码如下(有条件的可以自己试试,写写简单的几个接口):
'ithtw', 'cn' => 'IT十万个为什么'); echo json_encode($array,JSON_UNESCAPED_UNICODE); ?>
文件格式我保存的是UTF-8格式,所以我们获取到的数据编码格式也是UTF-8的。如果你用GBK解析肯定中文是乱码或者还会出错。然后下面是http通讯代码
static func httpRequest(urlString :String, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void){ let url = NSURL(string: urlString) let request = NSURLRequest(URL: url!) let config = NSURLSessionConfiguration.defaultSessionConfiguration()//默认配置 config.timeoutIntervalForRequest = TIME_OUT //连接超时时间 let session = NSURLSession(configuration: config) let task = session.dataTaskWithRequest(request, completionHandler: completionHandler) task.resume() }
调用方法如下:
HttpClient.httpRequest("http://www.it72.com/json.php", completionHandler: { (data, response, error) -> Void in if data != nil && response != nil { let result:String = NSString(data:data!, encoding: NSUTF8StringEncoding) as String! print(result) JsonParser.parse(data!) }else{ print(error) } })
最后就是解析方法:
static func parse(json :NSData){ let jsonObj:AnyObject? = try?NSJSONSerialization.JSONObjectWithData(json, options: NSJSONReadingOptions.AllowFragments) if(!NSJSONSerialization.isValidJSONObject(jsonObj!)){ print("json format is invalid") return } let name = jsonObj?.objectForKey("name") as! String let cn = jsonObj?.objectForKey("cn") as! String NSLog("%@,%@", name,cn) }
上图有真相:
最后再补充两个别人的代码,一个是读取,一个是写入。不过最后的参数和我用的不一样。可能是Swift版本不同。
先来看写入
//简单的Json =》 文本转换 var dict = ["id":"002", "name": "abc"] var jsonDict = NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.allZeros, error: nil) //直接写入文件 jsonDict?.writeToFile("/正确路径/test.json", atomically: true) //也可以把Json转换为String字符串 var str = NSString(data: jsonDict!, encoding: NSUTF8StringEncoding)
再来看解析
/* { "id": "001", "name": "xyz", "data": ["100", "220", "300", "400"] } */ //从一个本地项目资源中读取data.Json文件 var path: String = NSBundle.mainBundle().pathForResource("data", ofType: "Json")! var nsUrl = NSURL(fileURLWithPath: path) var nsData: NSData = NSData(contentsOfURL: nsUrl!)! //读取Json数据 var json: AnyObject? = NSJSONSerialization.JSONObjectWithData(nsData, options: NSJSONReadingOptions.allZeros, error:nil) //读取普通数据 var id: String = json?.objectForKey("id") as String println(id) //读取数组类型数据 var array: [String] = json?.objectForKey("data") as [String] println(array.count)
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2302
- 用户1336
- 访客10962994
每日一句
Progress starts with one brave step forward.
进步始于一次勇敢的迈步。
进步始于一次勇敢的迈步。
新会员