Swift开发之Json解析NSJSONSerialization篇

Home / iOS MrLee 2016-3-11 4662

做过App通讯的基本上都知道最常用的格式是json和xml,不过现在xml用的越来越少了。主要是因为xml生成和通讯数据量稍大于json,而且json格式直观性比xml更强。所以现在基本上都是在用json格式。在本篇Swift开发学习中,我们就以系统自带的API来解析Json,本人的原则是尽量使用官方的,比第三方更专业,对吧!。第三方可能编写更简单,但是殊不知如果人家的有BUG,你可能都不知道是哪里出的问题。最后还得花更多的时候找BUG出现在哪里!
为了方便测试,我自己在服务器上定义了一个简单的接口,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)
    }

上图有真相:

CD03E564-1DD1-499A-8040-15018EE8976C


最后再补充两个别人的代码,一个是读取,一个是写入。不过最后的参数和我用的不一样。可能是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)

 

本文链接:https://www.it72.com/7949.htm

推荐阅读
最新回复 (0)
返回