Swift-字典与JSON转换

作者: FlyElephant | 来源:发表于2016-11-27 12:26 被阅读2970次

    Swift中经常会遇到字典和字符串的相互转换,因此可以转换可以封装起来,转换代码如下:

    func convertStringToDictionary(text: String) -> [String:AnyObject]? {
        if let data = text.data(using: String.Encoding.utf8) {
            do {
                return try JSONSerialization.jsonObject(with: data, options: [JSONSerialization.ReadingOptions.init(rawValue: 0)]) as? [String:AnyObject]
            } catch let error as NSError {
                print(error)
            }
        }
        return nil
    }
    
    
    func convertDictionaryToString(dict:[String:AnyObject]) -> String {
        var result:String = ""
        do {
            //如果设置options为JSONSerialization.WritingOptions.prettyPrinted,则打印格式更好阅读
            let jsonData = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions.init(rawValue: 0))
    
            if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
                result = JSONString
            }
            
        } catch {
            result = ""
        }
        return result
    }
    
    func convertArrayToString(arr:[AnyObject]) -> String {
        var result:String = ""
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: arr, options: JSONSerialization.WritingOptions.init(rawValue: 0))
            
            if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
                result = JSONString
            }
            
        } catch {
            result = ""
        }
        return result
    }
    

    Swift字典转字符串扩展:

    extension Dictionary where Key: ExpressibleByStringLiteral, Value:AnyObject {
        
        var jsonString:String {
            do {
                let stringData = try JSONSerialization.data(withJSONObject: self as NSDictionary, options: JSONSerialization.WritingOptions.prettyPrinted)
                if let string = String(data: stringData, encoding: String.Encoding.utf8){
                    return string
                }
            } catch _ {
                
            }
            return ""
        }
    }
    

    实际测试:

        let jsonText:String = "{\"order_info\":[{\"order_id\":\"1479828084819597144\",\"channel\":\"ios\",\"product_id\":\"02\"},{\"order_id\":\"1479828084819597144\",\"channel\":\"ios\",\"product_id\":\"02\"}]}"
        
        let dict = self.convertStringToDictionary(text: jsonText)
        print("字符串转换之后的字典:\(dict!)")
        
        
        var dictionaryOrArray : [String: AnyObject] = [:]
        dictionaryOrArray["a\"b"] = "cd" as AnyObject?
        dictionaryOrArray["strings"] = ["string", "another"] as AnyObject?
        dictionaryOrArray["keywdict"] = [ "anotherKey": 100, "Key2": "Val2"] as AnyObject?
        dictionaryOrArray["numbers"] = [ 1, 2, 3] as AnyObject?
        dictionaryOrArray["bools"] = [ true, false] as AnyObject?
        let convertResult:String = self.convertDictionaryToString(dict: dictionaryOrArray)
        print("字典转换之后的字符串:\(convertResult)")
        
        
        let array:[String] = ["FlyElephant","keso"]
        print("数组转换之后的数组:\(self.convertArrayToString(arr: array as [AnyObject]))")

    相关文章

      网友评论

        本文标题:Swift-字典与JSON转换

        本文链接:https://www.haomeiwen.com/subject/soxnpttx.html