美文网首页花落√莫相思swift
44-Swift 之 JSONSerialization

44-Swift 之 JSONSerialization

作者: NetWork小贱 | 来源:发表于2017-07-07 14:21 被阅读283次

    一 、JSONSerialization 的介绍

    Apple从 IOS5.0 推出 SDK 自带的 JSON 解析对象 NSJSONSerialization 。而在 Swift3.0 被更名为 JSONSerialization 。JSONSerialization是一个非常好用的JSON生成和解析工具,效率也比其他第三方开源项目高。

    》》 使用说明:(官网说明)
    JSONSerialization 能将JSON 转化成Foundation 对象,也能将Foundation对象转换生JSON。但是转换的前提条件是:
    1、顶层对象必须是 Array & Dictionary 。
    2、所有的对象必须是NSString,NSNumber,NSArray,NSDictionary, or NSNull 中的一个。
    3、所有Dictionary的key必须是 String 。
    4、Number 对象不能是非数值和无穷值。
    注意: 在使用 JSONSerialization.isValidJSONObject(obj: Any) 来判断是否可以转化。

    二、JSONSerialization 的使用说明

    1、将Function 对象转化成 JSON 对象

    // TODO : Function 对象转JSON
    func functionToJSON(object:Any) -> Data {
        /**
         先判断是否可以转换
         */
        if !JSONSerialization.isValidJSONObject(object) {
             return Data.init()
        }
        /**
         开始转换
         JSONSerialization.WritingOptions.prettyPrinted 是输出JSON时的格式更容易查看。
         */
        return try! JSONSerialization.data(withJSONObject: object, options: .prettyPrinted)
    }
    

    2、 将JSON 对象转化成Function 的对象

    // TODO : JSON对象转Function
    
    func JSONToFunction(AnyData:Data) -> Any {
        /**
         判断是否可以转换
         */
        if JSONSerialization.isValidJSONObject(AnyData) {
             return NSNull.init()
        }
        /**
         开始转化
         */
        return try! JSONSerialization.jsonObject(with: AnyData, options: .mutableContainers)
    }
    
    

    3、 上面个两个函数的使用

    1、数组的转换
     // 数组
    let  ArrayFunc = ["刘婵","小乔","吕布"]
    // 转换
    let ArrayJsonData = self.functionToJSON(object: ArrayFunc)
    // 解码
    let ArrayUJson = self.JSONToFunction(AnyData: ArrayJsonData)
    // 输出
    print(ArrayUJson)
    /**
     输出结果
     (
     "\U5218\U5a75",
     "\U5c0f\U4e54",
     "\U5415\U5e03"
     )
     */
    
    
    2、字典的转化
     // 字典
    let Dictionary  = ["A":"安其拉","B":"BBB","C":"蔡文姬"]
    // 转换
    let DictionaryJsonData = self.functionToJSON(object: Dictionary)
    // 解码
    let DictionaryUJson = self.JSONToFunction(AnyData: DictionaryJsonData)
    // 输出
    print(DictionaryUJson)
    /**
     输出结果
     {
     A = "\U5b89\U5176\U62c9";
     B = BBB;
     C = "\U8521\U6587\U59ec";
     }
    
     */
    

    4、 JSON 对象写入一个数据流中的函数

    // TODO : 将一个JSON的对象写入一个流中
    func writeJSONDataToStream(jsonData:Any,stream:OutputStream) -> (Int,NSError) {
        /**
         判断是否可以写入
         */
        
        var error :NSError?
        if JSONSerialization.isValidJSONObject(jsonData) {
            return (JSONSerialization.writeJSONObject(jsonData, to: stream, options: .prettyPrinted, error: &error),error!)
        }
        return (0,error!)
    }
    

    5、从一个数据流中获取JSON 对象

    // TODO : 从一个流中获取数据
    func getJsonAnyForStream(stream:InputStream) -> Any {
        return try! JSONSerialization.jsonObject(with: stream, options: .mutableContainers)
    }
    

    相关文章

      网友评论

        本文标题:44-Swift 之 JSONSerialization

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